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 与其说是搜索,不如说是枚举的更多相关文章

  1. HDU 4430 &amp; ZOJ 3665 Yukari&#39;s Birthday(二分法+枚举)

    主题链接: HDU:pid=4430" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4430 ...

  2. [ZOJ 1011] NTA (dfs搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...

  3. POJ 1903 & ZOJ 2469 & UVA 1326 Jurassic Remains (部分枚举)

    题意:给定n个只有大写字母组成的字符串,选取尽可能多的字符串,使得这些字符串中每个字母的个数都是偶数.n<=24 思路:直接枚举每个字符串的选或不选,复杂度是O(2^n).其实还有更简便的方法. ...

  4. ZOJ 1492 Maximum Clique 搜索最大团

    ZOJ1492 题意:给一个无向图 求最大团的大小.节点数小于50 数据有限,考虑记忆化搜索,方程很好给出. 令 Si={vi,vi+1.....vn} mc[i]表示Si最大团的大小,倒着推算. 必 ...

  5. zoj 3644 记忆化搜索

    题目:给出一个有向图,从1到n,每个结点有个权值,每走一步,分值为结点权值的LCM,而且每一步的LCM都要有变化,问到达N的时候分值恰好为K的路径有多少条 记忆化搜索,虽然做过很多了,但是一直比较慢, ...

  6. 【搜索】POJ-3187 枚举全排列

    一.题目 Description FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to ...

  7. DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章

    作者:张浩斌 链接:https://www.zhihu.com/question/45552115/answer/99388265 来源:知乎 著作权归作者张浩斌和知乎所有.   ---------- ...

  8. 浙江大学2015年校赛F题 ZOJ 3865 Superbot BFS 搜索

    不知道为什么比赛的时候一直想着用DFS 来写 一直想剪枝结果还是TLE = = 这题数据量不大,又是问最优解,那么一般来说是用 BFS 来写 int commandi[4] = {1, 2, 3, 4 ...

  9. ZOJ - 1539 记忆化搜索

    注意不要仅搜DP(1e7),因为这不是线性的 #include<iostream> #include<algorithm> #include<cstdio> #in ...

随机推荐

  1. virtual析构函数的作用

    C++ Primter中讲“在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数”. 析构函数是为了在 ...

  2. 九度OJ 1351 数组中只出现一次的数字

    题目地址:http://ac.jobdu.com/problem.php?pid=1351 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输 ...

  3. 【转】SQL删除重复数据方法

    例如: id           name         value 1               a                 pp 2               a           ...

  4. QQ登录网站接入

    QQ网站登录是一个非常常用的功能,网上有很多的资料,在此只做一个整理: QQ登录接入也在不断的升级,目前我发布的是2.1,很多资料里显示的那些繁杂的步骤已经不需要了: 第一步需要先申请,申请地址如下: ...

  5. Unix/Linux之命令备忘录

    ps:是显示瞬间进程的状态,并不动态连续 kill:用于杀死进程或者给进程发送信号 // 在Linux下查看所有java进程命令 ps -ef | grep java: //  停止所有java进程命 ...

  6. Oracle procedure存储过程/function函数

    --函数的创建 create function func1(dno number) return NUMBER--必须带有返回值 is v_max number;--定义返回值 begin selec ...

  7. 上传头像,界面无跳转,php+js

    上传头像,界面无跳转的方式很多,我用的是加个iframe那种.下面直接上代码. html: //route 为后端接口//upload/avatar 为上传的头像的保存地址//imgurl=/uplo ...

  8. PHP初学留神(五)·小结

    来学习快两个月了,这周末即将回家开始写论文.那么走之前,好好总结一下这两个月的所学所得吧.这段时间,在实验室里做的Web开发主要涉及到了web开发的一些框架内容以及php基础知识.思维导图记录如下. ...

  9. 怎么预防sql注入攻击

    假设sql是搜索用户A的文章,sql会是这样: select * from table where owner='A'; sql注入攻击者会修改用户名来实现攻击,例如把A 改成A' or 1='1 组 ...

  10. IOS中如何判断APP是否安装后首次运行或升级后首次运行

    对于是否为首次安装的App可以使用如下方法来判断 [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"] ...