CCF 201712-3 Crontab
这个题确实有点复杂,不过以前做过几道日期模拟题,对这还是有点灵感的。
静下心来慢慢分析就好。
我写了三个小时才AC
太菜。。
------------------------------------------------------------------------------
写这个题的时候肘子跟我说他那个题输出中间变量忘注释了,我还偷乐了一下,结果我写完提交的时候也忘记了注释。。
天哪。
给我返回个0分,瞬间绝望。
修改掉后提交得了80分。
后来检查原因有两个。
一个是前面所给的字母不区分大小写。
另一个是后面限制条件复制过去的时候忘记改了。
修改完后就AC了。
代码有点糟糕,但我感觉很朴素吧。
#include<bits/stdc++.h>using namespace std;string mi,h,day,mon,week,com;map<string,int> mp;void init(){mp["jan"]=1;mp["feb"]=2;mp["mar"]=3;mp["apr"]=4;mp["may"]=5;mp["jun"]=6;mp["jul"]=7;mp["aug"]=8;mp["sep"]=9;mp["oct"]=10;mp["nov"]=11;mp["dec"]=12;mp["sun"]=0;mp["mon"]=1;mp["tue"]=2;mp["wed"]=3;mp["thu"]=4;mp["fri"]=5;mp["sat"]=6;
}struct node{bool mi[60]; //分bool h[24]; //时bool day[32]; //天bool mon[13]; //月bool week[7]; //星期string com;
}p[30];int monthping[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int monthrun[]={0,31,29,31,30,31,30,31,31,30,31,30,31};void trans_form(bool w[],int MAX,string s){int pre;for(int j=0;s[j];j++){if(s[j]=='*'){for(int k=0;k<=MAX;k++){w[k]=1;}}else if(isdigit(s[j])){int d=0;while(isdigit(s[j])&&s[j]){d=d*10+s[j]-'0';j++;}w[d]=1;
// cout<<d<<endl;j--;if(s[j+1]=='-') pre=d;}else if(s[j]=='-'){j++;int d=0;if(isdigit(s[j])) {while(isdigit(s[j])&&s[j]){d=d*10+s[j]-'0';j++;}w[d]=1;j--;}else if(isalpha(s[j])){string str;while(isalpha(s[j])&&s[j]){str+=tolower(s[j++]);}d=mp[str];j--;w[d]=1;}for(int k=pre+1;k<d;k++){w[k]=1;}}else if(isalpha(s[j])){string str;while(isalpha(s[j])&&s[j]){str+=tolower(s[j++]);}int d=mp[str];j--;if(s[j+1]=='-') pre=d;w[d]=1;}}
}int paneh(int yi,int mi,int di,int eyear,int emonth,int eday,int ehour){if(yi==eyear&&mi==emonth&&eday==di) return ehour+1;else return 24;
}int pansh(int yi,int mi,int di,int syear,int smonth,int sday,int shour){if(yi==syear&&mi==smonth&&sday==di) return shour;else return 0;
}int panefen(int yi,int mi,int di,int hi,int eyear,int emonth,int eday,int ehour,int eminit){if(yi==eyear&&mi==emonth&&eday==di&&ehour==hi) return eminit;else return 60;
}int pansfen(int yi,int mi,int di,int hi,int syear,int smonth,int sday,int shour,int sminit){if(yi==syear&&mi==smonth&&sday==di&&shour==hi) return sminit;else return 0;
}int main(){init();int n;string s,t;int syear,smonth,sday,shour,sminit;int eyear,emonth,eday,ehour,eminit;cin>>n>>s>>t;syear=(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');smonth=(s[4]-'0')*10+(s[5]-'0');sday=(s[6]-'0')*10+(s[7]-'0');shour=(s[8]-'0')*10+(s[9]-'0');sminit=(s[10]-'0')*10+(s[11]-'0');eyear=(t[0]-'0')*1000+(t[1]-'0')*100+(t[2]-'0')*10+(t[3]-'0');emonth=(t[4]-'0')*10+(t[5]-'0');eday=(t[6]-'0')*10+(t[7]-'0');ehour=(t[8]-'0')*10+(t[9]-'0');eminit=(t[10]-'0')*10+(t[11]-'0');// printf("%d %d %d %d %d\n",syear,smonth,sday,shour,sminit);
// printf("%d %d %d %d %d\n",eyear,emonth,eday,ehour,eminit);for(int i=0;i<n;i++){memset(p[i].mi,0,sizeof(p[i].mi));memset(p[i].h,0,sizeof(p[i].h));memset(p[i].day,0,sizeof(p[i].day));memset(p[i].mon,0,sizeof(p[i].mon));memset(p[i].week,0,sizeof(p[i].week));cin>>mi>>h>>day>>mon>>week>>com;
// cout<<h<<endl;trans_form(p[i].mi,59,mi);trans_form(p[i].h,23,h);trans_form(p[i].day,31,day);trans_form(p[i].mon,12,mon);trans_form(p[i].week,6,week);p[i].com=com;
// for(int j=0;j<24;j++){
// if(p[i].h[j])
// cout<<j<<endl;
// }}
// printf("%d %d %d %d %d\n",syear,smonth,sday,shour,sminit);int sum=0;for(int i=1970;i<syear;i++){if((i%4==0&&i%100!=0)||i%400==0){sum+=366;}else sum+=365;}for(int i=1;i<smonth;i++){if((syear%4==0&&syear%100!=0)||syear%400==0){sum+=monthrun[i];}else sum+=monthping[i];}for(int j=1;j<=sday;j++){sum++;}
// cout<<sum<<endl;int wek=(sum+4-1)%7;
// cout<<wek<<endl;for(int yi=syear;yi<=eyear;yi++){if((yi%4==0&&yi%100!=0)||yi%400==0){for(int mi=(yi==syear?smonth:1);mi<=(yi==eyear?emonth:12);mi++){for(int di=(yi==syear?(mi==smonth?sday:1):1);di<=(yi==eyear?(mi==emonth?eday:monthrun[mi]):monthrun[mi]);di++,wek=(wek+1)%7){for(int hi=pansh(yi,mi,di,syear,smonth,sday,shour);hi<paneh(yi,mi,di,eyear,emonth,eday,ehour);hi++){for(int feni=pansfen(yi,mi,di,hi,syear,smonth,sday,shour,sminit);feni<panefen(yi,mi,di,hi,eyear,emonth,eday,ehour,eminit);feni++){for(int i=0;i<n;i++){if(p[i].mon[mi]&&p[i].day[di]&&p[i].h[hi]&&p[i].mi[feni]&&p[i].week[wek]){cout<<yi;if(mi<10) cout<<"0";cout<<mi;if(di<10) cout<<"0";cout<<di;if(hi<10) cout<<"0";cout<<hi;if(feni<10) cout<<"0";cout<<feni;cout<<" ";cout<<p[i].com<<endl;break;}}// cout<<yi<<" "<<mi<<" "<<di<<" "<<hi<<" "<<feni<<" 星期:"<<wek<<endl;}}}}}else{for(int mi=(yi==syear?smonth:1);mi<=(yi==eyear?emonth:12);mi++){for(int di=(yi==syear?(mi==smonth?sday:1):1);di<=(yi==eyear?(mi==emonth?eday:monthping[mi]):monthping[mi]);di++,wek=(wek+1)%7){for(int hi=pansh(yi,mi,di,syear,smonth,sday,shour);hi<paneh(yi,mi,di,eyear,emonth,eday,ehour);hi++){for(int feni=pansfen(yi,mi,di,hi,syear,smonth,sday,shour,sminit);feni<panefen(yi,mi,di,hi,eyear,emonth,eday,ehour,eminit);feni++){for(int i=0;i<n;i++){if(p[i].mon[mi]&&p[i].day[di]&&p[i].h[hi]&&p[i].mi[feni]&&p[i].week[wek]){cout<<yi;if(mi<10) cout<<"0";cout<<mi;if(di<10) cout<<"0";cout<<di;if(hi<10) cout<<"0";cout<<hi;if(feni<10) cout<<"0";cout<<feni;cout<<" ";cout<<p[i].com<<endl;break;}}// cout<<yi<<" "<<mi<<" "<<di<<" "<<hi<<" "<<feni<<" 星期:"<<wek<<endl;}}}}}}
// cout<<"123"<<endl;return 0;
}
CCF 201712-3 Crontab相关推荐
- ccf报数游戏java_ccf 201712 02 (游戏)
鄙人不才,此中鄙陋甚多,望海涵!!! 这里我们来详细讲解一下圆桌问题的相关题目 第一道一定是hdu的4841了,罪恶的源头 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始 ...
- CCF 201712-3 Crontab
本地AC,CCF编译失败. 通过对每条任务进行处理,将可能的月,日处理出来,并且比对对应星期是否符合要求.再对时分进行处理,判断整体时间在所给区域内. 思路借鉴自https://blog.csdn.n ...
- CCF计算机软件能力认证试题练习:201712-3 Crontab
Crontab 来源: 标签: 参考资料: 相似题目: 题目 输入 输出 输入样例 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * ...
- CCF系列题解--2017年12月第三题 Crontab
样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * hav ...
- CCF认证 2017-12 行车路线
最短路的变形,有两种道路,需要分开计算最短距离,要不然得不到全局最优解 考试得分80,后来看了好久发现,竟然是int爆掉了,导致没有满分(囧) #include<iostream> #in ...
- 201712 CCF
201712-1 最小差值 问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值. 输入格式 输入第一行包含一个整数n. 第二行包含n个正整数,相邻整数之间使用一个空 ...
- CCF CSP认证菜鸟刷题日志
CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...
- CCF认证历年真题 满分代码(更新至2018年12月)
目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...
- CCF认证历年真题 满分代码
目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...
- CCF201712-3 Crontab(100分)【模拟+文本处理】
样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * hav ...
最新文章
- oracle中各种函数,oracle中常用函数大全
- (技能篇)Mysql在linux下的全量热备份
- mcem r语言代码_R语言阈值自回归模型(TAR)代码示例
- python文字游戏 生成数字菜单_pygame游戏之旅 游戏中添加显示文字
- CSS YUI reset
- OpenCV读取图片
- jq 获取本地ip地址
- android imageview topcrop,android照相选择图库后将照片剪裁压缩显示到imageview上
- VisionPro基础篇(一): VisionPro界面介绍
- sqlserver 数据误删除恢复
- Soft Filter Pruning (SFP)——允许更新Pruned Filters的Channel Pruning策略
- history of program atan2(y,x)和pow(x,y)
- PTA 7-9 叶节点求和 (20 分)
- iPhone12蜜汁操作,环保还是揽财?
- 如何将Excel中的一列内容合并到一起显示?
- radmin自动启动服务器,Radmin自动登录器及服务端一键部署
- 程序员是“短命”职业吗?年龄大了是不是没前途?
- 百度的Js日历,值得一看
- 手把手教你玩转Vue
- Android:TI 型号2640 R2F低功耗蓝牙芯片 OAD升级
热门文章
- 你知道 1 + 1 等于几吗?
- UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\u25aa‘ in position 11923: illegal multibyte
- 怎样实现WhatsApp多开?
- 第一次申请赴美商务签经历
- 我的世界服务器内无限刷物品,我的世界怎么无限刷物品
- 远程服务器停止运行了怎么办,远程桌面己停止工作”的解决方法
- 2021-06-22 加水印后原本EXCEL内容被覆盖
- 2021年南京市高考成绩查询,2021年南京高考各高中成绩及本科升学率数据排名及分析...
- PPT处理控件Aspose.Slides功能演示:使用 Java 在 PowerPoint 中创建和操作表格
- 工作两年前端经验分享