样例输入

3 201711170032 201711222352
0 7 * * 1,3-5 get_up
30 23 * * Sat,Sun go_to_bed
15 12,18 * * * have_dinner

样例输出

201711170700 get_up
201711171215 have_dinner
201711171815 have_dinner
201711181215 have_dinner
201711181815 have_dinner
201711182330 go_to_bed
201711191215 have_dinner
201711191815 have_dinner
201711192330 go_to_bed
201711200700 get_up
201711201215 have_dinner
201711201815 have_dinner
201711211215 have_dinner
201711211815 have_dinner
201711220700 get_up
201711221215 have_dinner
201711221815 have_dinner

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstdlib>
#include<queue>
using namespace std;
const int N=20+1;
const string Month[]={"nothing","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
const string Week[]={"sun","mon","tue","wed","thu","fri","sat"};
const int dnum[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
struct qj
{int a; int b;
};
struct node
{vector<qj> mte;vector<qj> hour;vector<qj> day;vector<qj> mon;vector<qj> week;string cmd;
}m[N];
struct cmder
{int year,month,day,hour,mte;string cmd;cmder(int a,int b,int c,int d,int e,string f){year=a;month=b;day=c;hour=d;mte=e;cmd=f;}bool operator < (const cmder &u) const  {if(year>u.year) return true;if(year<u.year) return false;if(month>u.month) return true;if(month<u.month) return false;if(day>u.day) return true;if(day<u.day) return false;if(hour>u.hour) return true;if(hour<u.hour) return false;if(mte>u.mte) return true;if(mte<u.mte) return false;return true; }
};
priority_queue<cmder> outq;
bool is_end(int year,int month,int day,int hour,int mte,int uyear,int umonth,int uday,int uhour,int umte) //判断是否超出时间范围
{if(year>uyear) return true;if(year<uyear) return false;if(month>umonth) return true;if(month<umonth) return false;if(day>uday) return true;if(day<uday) return false;if(hour>uhour) return true;if(hour<uhour) return false;if(mte>umte) return true;if(mte<umte) return false;return true;
}
bool is_week(int q,int e)
{bool flag=false;int l=m[q].week.size();for(int i=0;i<l;i++)if(m[q].week[i].b==-1||e<=m[q].week[i].b&&e>=m[q].week[i].a){flag=true;break;}return flag;
}
bool is_month(int q,int d)
{bool flag=false;int l=m[q].mon.size();for(int i=0;i<l;i++)if(m[q].mon[i].b==-1||d<=m[q].mon[i].b&&d>=m[q].mon[i].a){flag=true;break;}return flag;
}
bool is_day(int q,int c)
{bool flag=false;int l=m[q].day.size();for(int i=0;i<l;i++)if(m[q].day[i].b==-1||c<=m[q].day[i].b&&c>=m[q].day[i].a){flag=true;break;}return flag;
}
bool is_hour(int q,int nb)
{bool flag=false;int l=m[q].hour.size();for(int i=0;i<l;i++)if(m[q].hour[i].b==-1||(nb<=m[q].hour[i].b)&&(nb>=m[q].hour[i].a)){flag=true;break;}return flag;
}
bool is_mte(int q,int a)
{bool flag=false;int l=m[q].mte.size();for(int i=0;i<l;i++)if(m[q].mte[i].b==-1||a<=m[q].mte[i].b&&a>=m[q].mte[i].a){flag=true;break;}return flag;
}
int isyear(int a)
{if(a%400==0||a%4==0&&a%100!=0) return 1;return 0;
}
int zeller(int year,int month,int day)
{int m,d=day;if(month<3){m=month+12;year--;}else m=month;int c=year/100;    int y=year%100;int w=(c/4)-2*c+(y+y/4)+(13*(m+1)/5)+day-1;return (w%7+7)%7;
}
int n;
string s,t;
int main()
{cin>>n>>s>>t;int sa,sb,sc,sd,se;int ea,eb,ec,ed,ee;sa=sb=sc=sd=se=0;ea=eb=ec=ed=ee=0;for(int i=0;i<4;i++)sa=sa*10+s[i]-'0';for(int i=4;i<6;i++)sb=sb*10+s[i]-'0';for(int i=6;i<8;i++)sc=sc*10+s[i]-'0';for(int i=8;i<10;i++)sd=sd*10+s[i]-'0';for(int i=10;i<12;i++)se=se*10+s[i]-'0';for(int i=0;i<4;i++)ea=ea*10+t[i]-'0';for(int i=4;i<6;i++)eb=eb*10+t[i]-'0';for(int i=6;i<8;i++)ec=ec*10+t[i]-'0';for(int i=8;i<10;i++)ed=ed*10+t[i]-'0';for(int i=10;i<12;i++)ee=ee*10+t[i]-'0';for(int q=0;q<n;q++){string a;int l;qj k;cin>>a;l=a.length();int t=0,t0;bool flag=false;for(int i=0;i<l;i++){if(isdigit(a[i])) t=t*10+a[i]-'0';else if(a[i]=='-'){t0=t;t=0;flag=true;}else if(a[i]==','){if(flag) k.a=t0;else k.a=t;k.b=t;m[q].mte.push_back(k);t=0;flag=false;}else if(a[i]=='*'){k.a=k.b=-1;m[q].mte.push_back(k);break;}if(i==l-1) {if(flag) k.a=t0;else k.a=t;k.b=t;m[q].mte.push_back(k);t=0;}}cin>>a;l=a.length();t=0;flag=false;for(int i=0;i<l;i++){if(isdigit(a[i])) t=t*10+a[i]-'0';else if(a[i]=='-'){t0=t;t=0;flag=true;}else if(a[i]==','){if(flag) k.a=t0;else k.a=t;k.b=t;m[q].hour.push_back(k);t=0;flag=false;}else if(a[i]=='*'){k.a=k.b=-1;m[q].hour.push_back(k);break;}if(i==l-1){if(flag) k.a=t0;else k.a=t;k.b=t;m[q].hour.push_back(k);t=0;}}cin>>a;l=a.length();t=0;flag=false;for(int i=0;i<l;i++){if(isdigit(a[i])) t=t*10+a[i]-'0';else if(a[i]=='-'){t0=t;t=0;flag=true;}else if(a[i]==','){if(flag) k.a=t0;else k.a=t;k.b=t;m[q].day.push_back(k);t=0;flag=false;}else if(a[i]=='*'){k.a=k.b=-1;m[q].day.push_back(k);break;}if(i==l-1){if(flag) k.a=t0;else k.a=t;k.b=t;m[q].day.push_back(k);t=0;flag=false;}}string a0="";cin>>a;l=a.length();t=0;flag=false;for(int i=0;i<l;i++){if(isdigit(a[i])) t=t*10+a[i]-'0';else if(isalpha(a[i])) a0+=a[i];else if(a[i]=='-'){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<13;j++)if(Month[j]==a0){t=j;break;}}a0="";t0=t;t=0;flag=true;}else if(a[i]==','){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<13;j++)if(Month[j]==a0){t=j;break;}}a0="";if(flag) k.a=t0;else k.a=t;k.b=t;t=0;m[q].mon.push_back(k);flag=false;}else if(a[i]=='*'){k.a=k.b=-1;m[q].mon.push_back(k);break;}if(i==l-1){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<13;j++)if(Month[j]==a0){t=j;break;}}a0="";if(flag) k.a=t0;else k.a=t;k.b=t;t=0;m[q].mon.push_back(k);flag=false;}}a0="";cin>>a;l=a.length();t=0;flag=false;for(int i=0;i<l;i++){if(isdigit(a[i])) t=t*10+a[i]-'0';else if(isalpha(a[i])) a0+=a[i];else if(a[i]=='-'){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<7;j++)if(Week[j]==a0){t=j;break;}}a0="";t0=t;t=0;flag=true;}else if(a[i]==','){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<7;j++)if(Week[j]==a0){t=j;break;}}a0="";if(flag) k.a=t0;else k.a=t;k.b=t;t=0;m[q].week.push_back(k);flag=false;}else if(a[i]=='*'){k.a=k.b=-1;m[q].week.push_back(k);break;}if(i==l-1){if(a0.length()!=0){for(int j=0;j<a0.length();j++)a0[j]=tolower(a0[j]);for(int j=0;j<7;j++)if(Week[j]==a0){t=j;break;}}a0="";if(flag) k.a=t0;else k.a=t;k.b=t;t=0;m[q].week.push_back(k);flag=false;}}cin>>a;m[q].cmd=a;int i=sa,j=sb,nk=sc,x=sd,y=se; for(;i<=ea;i++,j=1)for(;j<=12;j++,nk=1)if(is_month(q,j))for(;nk<=dnum[j]+(j==2?isyear(i):0);nk++,x=0)if(is_day(q,nk)&&is_week(q,zeller(i,j,nk)))for(;x<24;x++,y=0)if(is_hour(q,x))for(;y<60;y++){if(is_end(i,j,nk,x,y,ea,eb,ec,ed,ee)) goto stop; if(is_mte(q,y)) outq.push(cmder(i,j,nk,x,y,a)); }stop:;}while(!outq.empty()){cmder out=outq.top();outq.pop();printf("%04d%02d%02d%02d%02d ",out.year,out.month,out.day,out.hour,out.mte),cout<<out.cmd<<endl;}return 0;
}

CCF系列题解--2017年12月第三题 Crontab相关推荐

  1. CCF系列题解--2015年12月第三题 ASCII字符画

    问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术.例如,下图是用 ASCII 字符画出来的 CSPRO 字样. ..____.____..____. ...

  2. CCF系列题解--2016年12月第三题 权限查询

    问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限. 本题中的授权机制是这样设计的:每位用户具有若干角色,每种角色具有若 ...

  3. CCF系列题解--2013年12月第四题 有趣的数字

    问题描述 我们把一个数称为有趣的,当且仅当:        1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次.        2. 所有的0都出现在所有的1之前,而所有的2都出现 ...

  4. CCF系列题解--2015年3月第三题 节日

    问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c"的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ ...

  5. CCF系列题解--2018年3月第三题 URL映射

    问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...

  6. CCF系列题解--2015年12月第二题 棋类消除

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  7. CCF系列题解--2016年9月第四题 交通规划

    问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路. ...

  8. CCF系列题解--2016年4月第四题 方格游戏

    问题描述 小明在玩一个电脑游戏,游戏在一个n×m的方格图上进行,小明控制的角色开始的时候站在第一行第一列,目标是前往第n行第m列. 方格图上有一些方格是始终安全的,有一些在一段时间是危险的,如果小明控 ...

  9. CCF系列题解--2016年9月第二题 火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

最新文章

  1. VB.Net to C Sharp Converter有用吗?
  2. python自学时间-Python 从入门到精通:一个月就够了!
  3. 笔记本电脑排名2015_2015-2026全球及中国AC-DC电源适配器市场发展现状调研及未来前景行业展望...
  4. 两种方法清除Excel保护密码
  5. 机器学习实战学习笔记 一 k-近邻算法
  6. linux默认的https端口,如何在Ubuntu 18.04 Bionic Beaver Linux上拒绝除HTTP端口80和HTTPS端口443之外的所有传入端口...
  7. 5G关键技术:大规模多天线技术现状及研究点介绍
  8. 怎样启动python_python怎样运行
  9. python源码深度剖析_Python源码剖析-深度探索动态语言核心技术 PDF 下载
  10. Spring Cloud 各个版本之间的区别
  11. linux下内存如何释放,如何释放linux的内存
  12. VLog制作之素材拍摄和音乐选择
  13. TIA WinCC Unified入门经典
  14. Jmeter正则表达式提取器的使用
  15. ppt文字转换成word
  16. EcmaScript 6 - 块级作用域(block scope)
  17. 4 SQL server(定义表的主键 外键 ,记录增删改查)
  18. MPLS VXN配置实例
  19. DeFi基准利率今日为3.38%
  20. Oracle企业管理器(OEM)常见问题解答

热门文章

  1. 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
  2. 【一个王朝的背影】--余秋雨
  3. 数据可视化--物流大数据服务平台
  4. 4T移动硬盘 分区_手机连接移动硬盘教程
  5. 微信小程序-传统开发模式实现授权注册登录流程【超详细,附源码】
  6. 2023年腾讯云轻量应用服务器配置价格表(CPU/系统盘/流量/节点)
  7. 像FIFA一样踢球的AI,比打游戏更强吗?
  8. 安装NVIDIA驱动与CUDA教程(+cuDNN)(终极版)
  9. 通向架构师的道路(第二十七天)IBM网格计算与企业批处理任务架构
  10. 九龙证券|通信巨头火了!地产板块异动拉升,龙头获主力资金追捧