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 ...
随机推荐
- 双人五子棋对战(需要EasyX图像库)
实训要做项目呐.天天坐在电脑面前累死了.最近题刷的少.大多数都挺水.就不挨个编辑发上来了.发发白天写的项目吧.可能好几天更一下.实训结束恢复正常. 这个游戏需要EasyX的图像库.有兴趣的可以下一个图 ...
- windows phone 操作 http异步返回结果
wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果.纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理 ...
- css important
!important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权.语法格式{ cssRule !important },即 写在定义的最后面,例如:box{color:red !impo ...
- 4个好用的JS联动选择插件
jQuery City Select 一个简单的jQuery省市联动插件,可以自定义JSON字典实现其他内容的联动选择菜单. PCAS省.市.地区联动选择JS封装类 PCAS可能是国内使用人数最多的J ...
- jenkins 重新设置 管理员密码
由于服务器瘫痪,修好之后经常不上,就把jenkins的管理密码忘掉了. 查阅了网上所有方案之后发现没有一个 能正确修改密码的,特此列出下列网上的方法 第一.设成无需密码验证的(网上有教程,不过并不能修 ...
- STM32之定时器
一.定时器简介 1.时钟来源 2.定时器结构(以基本定时器为例) 二.基本定时器的编程方法 1.基本定时器的寄存器 2.例程 /** * @brief 定时器6的初始化,定时周期0.01s * @pa ...
- com.mchange.v2.c3p0.ComboPooledDataSource
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSourc ...
- spring ioc aop 原理
spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调 ...
- 1行代码为每个Controller自定义“TabBar”-b
这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航 ...
- 关于xcode6打包以及上线前企业部署测试的说明 --转自张诚教授微博
xcode6如何打包 首先clean然后点击归档 点击打包之后保存 点选第一个以后检查相关证书签名 那么我们开发完以后,在上线前如何给别人测试 有2种方法 1.使用299美金的企业开发者账号搭建企业部 ...