zoj 1033 与其说是搜索,不如说是枚举
zoj 与其说是搜索,不如说是枚举,只不过是通过搜索来实现的罢了。
主要是要注意好闰年的判断,特别是要注意好一串数字的划分。
题意其实我也看了一个晚上,才渐渐的看懂。
题意:
给你一个字符串,其中包含数字信息,年月日,如果还有数字意外的字符,那么就一定有两个字符,将年月日三中信息隔开
如果里面没有其他字符,那么就只有数字,其中分配给月,日每个需要两个数字字符,而分配给年则需要2,4个字符来表示
将限制条件写好,自然也就ac了。过程可能不好受,但是都是这么过来的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<set>
using std::cin;
using std::cout;
using std::endl;
using std::set;
set<int> ans;
int const N = ;
int month[]={,,,,,,,,,,,,};
int Date;
char tmp[N];
bool Isleap(int y)
{
return (y%==&&y%==)||(y%==&&y%!=);
}
int md(int y,int m)
{
return (m==&&Isleap(y))?month[m]+:month[m];
}
bool ymd(int y,int m,int d)
{
return (y>=&&y<=&&m>=&&m<=&&d>=&&d<=md(y,m));
}
int cal_date(int y,int m,int d)
{
int cnt=;
for(int i = ; i < y; i++)
if(Isleap(i))cnt += ;
else cnt += ;
for (int i = ; i < m; i++)
cnt+= md(y,i);
cnt = cnt + d;
return cnt;
}
bool Containf(int len)
{
for(int i=;i<len;i++)
if(tmp[i]<''||tmp[i]>'')
return true;
return false;
}
void example(int y,int m,int d,int a,int b,int c)
{
if(b<=&&c<=)
{
if(a<=)
for(int i=;i<=;i+=)
{
if(ymd(i+y,m,d))
{
int cnt=cal_date(y+i,m,d);
cnt=cnt-Date;
ans.insert(cnt);
}
}
if(a==)
{
if(ymd(y,m,d))
{
int cnt=cal_date(y,m,d);
cnt=cnt-Date;
ans.insert(cnt);
}
}
}
}
void function(int y,int m,int d,int a,int b,int c)
{
example(y,m,d,a,b,c);
example(y,d,m,a,c,b);
example(m,y,d,b,a,c);
example(m,d,y,b,c,a);
example(d,y,m,c,a,b);
example(d,m,y,c,b,a);
}
int main()
{
int T,len,y,m,d,Case=;
Date=cal_date(,,);
cin>>T;
while(T--)
{
ans.clear();
cin>>tmp;
len=strlen(tmp);
y=m=d=;
if(Containf(len))
{
int i=,a=,b=,c=;
for(;tmp[i]<=''&&tmp[i]>='';i++)y=y*+tmp[i]-'',a++;
i++;
for(;tmp[i]<=''&&tmp[i]>='';i++)m=m*+tmp[i]-'',b++;
i++;
for(;i<len;i++)d=d*+tmp[i]-'',c++;
function(y,m,d,a,b,c);
}
else
{
for(int i=;i<len-;i++)
{
for(int j=i+;j<len;j++)
{
y=m=d=;
for(int k=;k<i;k++)y=y*+tmp[k]-'';
for(int k=i;k<j;k++)m=m*+tmp[k]-'';
for(int k=j;k<len;k++)d=d*+tmp[k]-'';
function(y,m,d,i,j-i,len-j);
}
}
}
printf("Scenario #%d:\n",++Case);
if(ans.empty())
{
cout<< "Illegal date"<<endl<<endl;
continue;
}
set<int>::iterator rit;
for(rit=ans.begin();rit!=ans.end();rit++)
cout<<*rit<<endl;
cout<<endl;
}
return ;
}
zoj 1033 与其说是搜索,不如说是枚举的更多相关文章
- HDU 4430 & ZOJ 3665 Yukari's Birthday(二分法+枚举)
主题链接: HDU:pid=4430" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4430 ...
- [ZOJ 1011] NTA (dfs搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...
- POJ 1903 & ZOJ 2469 & UVA 1326 Jurassic Remains (部分枚举)
题意:给定n个只有大写字母组成的字符串,选取尽可能多的字符串,使得这些字符串中每个字母的个数都是偶数.n<=24 思路:直接枚举每个字符串的选或不选,复杂度是O(2^n).其实还有更简便的方法. ...
- ZOJ 1492 Maximum Clique 搜索最大团
ZOJ1492 题意:给一个无向图 求最大团的大小.节点数小于50 数据有限,考虑记忆化搜索,方程很好给出. 令 Si={vi,vi+1.....vn} mc[i]表示Si最大团的大小,倒着推算. 必 ...
- zoj 3644 记忆化搜索
题目:给出一个有向图,从1到n,每个结点有个权值,每走一步,分值为结点权值的LCM,而且每一步的LCM都要有变化,问到达N的时候分值恰好为K的路径有多少条 记忆化搜索,虽然做过很多了,但是一直比较慢, ...
- 【搜索】POJ-3187 枚举全排列
一.题目 Description FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to ...
- DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章
作者:张浩斌 链接:https://www.zhihu.com/question/45552115/answer/99388265 来源:知乎 著作权归作者张浩斌和知乎所有. ---------- ...
- 浙江大学2015年校赛F题 ZOJ 3865 Superbot BFS 搜索
不知道为什么比赛的时候一直想着用DFS 来写 一直想剪枝结果还是TLE = = 这题数据量不大,又是问最优解,那么一般来说是用 BFS 来写 int commandi[4] = {1, 2, 3, 4 ...
- ZOJ - 1539 记忆化搜索
注意不要仅搜DP(1e7),因为这不是线性的 #include<iostream> #include<algorithm> #include<cstdio> #in ...
随机推荐
- CentOS上无法识别NTFS格式分区的解决方法
插入U盘之后,按照下面的步骤: # fdisk -l /dev/sd* 通常这一步就能找到U盘,如果U盘有指示灯也会亮,表示被找到. # mount –t ntfs /dev/sdb1 /mnt/ ...
- Linux CPU亲缘性详解
前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是 ...
- JSON对象的stringify()和parse()方法
1.stringify() ---- JavaScript对象序列化为JSON字符串 eg1. var book = {title: 'JS', authors: ['Van'], edition:3 ...
- 恢复Delphi XE2的Library Path
Delphi XE2好好的,手贱乱删,结果新建一个工程都不能编译了,出现:DELPHI X2 [DCC Fatal Error] KjcxClient.dpr(1): F1027 Unit not f ...
- Sersync实时同步企业应用配置实战
一.实验环境 CentOS版本: 6.6(2.6.32.-504.el6.x86_64) Rsync版本: Rsync-3.0.6(系统自带) Sersync版本:sersync2.5.4_64bi ...
- 学会Twitter Bootstrap不再难
Twitter Bootstrap 3.0 是对其过去的重大改变,现在它更偏向于移动应用的框架,并且宣称是最好的web设计css框架之一,的确如此. 可能有人曾经使用过Twitter Bootstra ...
- LINQ实战
转载:http://www.cnblogs.com/yubinfeng/p/4567064.html 原作者:尼古拉斯~yu 文章部分内容在原文的基础上有删改. 我相信在net进阶的这个阶段,很 ...
- 拖尾渲染器 Trail Renderer
拖尾渲染器(Trail Renderer)用于制作跟在场景中的物体后面的拖尾效果来代表它们在到处移动. 必须给Materials一个材质渲染器设置的Colors才有效. 展示自己的一个demo...
- CODEVS 1638 修复公路
题目描述 Description A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄, ...
- MongoDB服务器启动异常 1067
删掉mongod.lock文件就重启就可以了.