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. vim 的 tags 模块 与 ctags

    1. 概述 一般来说,在代码中跳转,离不开 ctags. 实际上,vim 中代码跳转是由 vim tags 模块完成的,tags 模块依赖于 tags 文件. ctags(Generate tag f ...

  2. c++中动态尾随内存的技巧和定位new

    c 和 c++ 最大的特点就是对内存的自由操作,数据类型,其实都是对内存的一种解释方式.C语言中常用的一个技巧就是尾随数据,网络编程中经常会用到这个特性, 特别是以前写完成端口的时候,这个特性肯定是会 ...

  3. Linux简介及Ubuntu安装

    Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linux管道 Linux软件包管理 vim使用 用户及用户组管理 文件权限管理 大牛笔记-www.weix ...

  4. ie6下 gif动画不动

    ie6下 gif动画不动 如果有onclick事件:在IE6中,点击a标签,onclick事件会先执行,其次是href下的动作,href执行后,默认会执行跳转动作(尽管href属性不一定是一个地址), ...

  5. [python]使用ElementTree解析XML【译】

    19.7 The ElementTree XML API 源码:Lib/xml/etree/ElementTree.py Element类型是一个灵活的容器对象,设计出来是用于存储有层次的数据结构到内 ...

  6. Windows系统下Oracle数据库冷备

    一.背景: 具体的场景是数据库不是普通的OLTP系统,更像是OLAP系统,数据的更新频率很低,在noarchivelog 模式下运行,实时性要求低,但是数据只有一份不能弄丢,需要应付磁盘损坏等情况.这 ...

  7. 我的PHP之旅--数组的认识(初级)

    数组 PHP的数组与swift有些许不同,分为3类(初级,以后会涉及到多维数组和数组指针等). 枚举数组 关联数组 混合数组 枚举数组 枚举数组跟swift中的数组差不多: <?php $arr ...

  8. Ext.QuickTips.init();

    在Extjs的组件需要提示框时往往需要此语句. 首先,Ext.QuickTips是什么? 在Ext JS 4.2.0 的API中可以查到,注意在其他的Extjs版本以下查不到,这是因为在其他版本Ext ...

  9. ruby的gem和boundle安装解决办法

    gem和boundle安装在国内被墙,淘宝提供了淘宝提供了RubyGems的国内镜像站点,解决办法是: 对于gem: $ gem sources --remove https://rubygems.o ...

  10. 什么是实时应用程序自我保护(RASP)?

    什么产品可以定义为 RASP? RASP 英文为 Runtime application self-protection,它是一种新型应用安全保护技术,它将保护程序想疫苗一样注入到应用程序和应用程序融 ...