这个题确实有点复杂,不过以前做过几道日期模拟题,对这还是有点灵感的。

静下心来慢慢分析就好。

我写了三个小时才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相关推荐

  1. ccf报数游戏java_ccf 201712 02 (游戏)

    鄙人不才,此中鄙陋甚多,望海涵!!! 这里我们来详细讲解一下圆桌问题的相关题目 第一道一定是hdu的4841了,罪恶的源头 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始 ...

  2. CCF 201712-3 Crontab

    本地AC,CCF编译失败. 通过对每条任务进行处理,将可能的月,日处理出来,并且比对对应星期是否符合要求.再对时分进行处理,判断整体时间在所给区域内. 思路借鉴自https://blog.csdn.n ...

  3. CCF计算机软件能力认证试题练习:201712-3 Crontab

    Crontab 来源: 标签: 参考资料: 相似题目: 题目 输入 输出 输入样例 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * ...

  4. 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 ...

  5. CCF认证 2017-12 行车路线

    最短路的变形,有两种道路,需要分开计算最短距离,要不然得不到全局最优解 考试得分80,后来看了好久发现,竟然是int爆掉了,导致没有满分(囧) #include<iostream> #in ...

  6. 201712 CCF

    201712-1 最小差值 问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值. 输入格式 输入第一行包含一个整数n. 第二行包含n个正整数,相邻整数之间使用一个空 ...

  7. CCF CSP认证菜鸟刷题日志

    CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...

  8. CCF认证历年真题 满分代码(更新至2018年12月)

    目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...

  9. CCF认证历年真题 满分代码

    目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...

  10. 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 ...

最新文章

  1. oracle中各种函数,oracle中常用函数大全
  2. (技能篇)Mysql在linux下的全量热备份
  3. mcem r语言代码_R语言阈值自回归模型(TAR)代码示例
  4. python文字游戏 生成数字菜单_pygame游戏之旅 游戏中添加显示文字
  5. CSS YUI reset
  6. OpenCV读取图片
  7. jq 获取本地ip地址
  8. android imageview topcrop,android照相选择图库后将照片剪裁压缩显示到imageview上
  9. VisionPro基础篇(一): VisionPro界面介绍
  10. sqlserver 数据误删除恢复
  11. Soft Filter Pruning (SFP)——允许更新Pruned Filters的Channel Pruning策略
  12. history of program atan2(y,x)和pow(x,y)
  13. PTA 7-9 叶节点求和 (20 分)
  14. iPhone12蜜汁操作,环保还是揽财?
  15. 如何将Excel中的一列内容合并到一起显示?
  16. radmin自动启动服务器,Radmin自动登录器及服务端一键部署
  17. 程序员是“短命”职业吗?年龄大了是不是没前途?
  18. 百度的Js日历,值得一看
  19. 手把手教你玩转Vue
  20. Android:TI 型号2640 R2F低功耗蓝牙芯片 OAD升级

热门文章

  1. 你知道 1 + 1 等于几吗?
  2. UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\u25aa‘ in position 11923: illegal multibyte
  3. 怎样实现WhatsApp多开?
  4. 第一次申请赴美商务签经历
  5. 我的世界服务器内无限刷物品,我的世界怎么无限刷物品
  6. 远程服务器停止运行了怎么办,远程桌面己停止工作”的解决方法
  7. 2021-06-22 加水印后原本EXCEL内容被覆盖
  8. 2021年南京市高考成绩查询,2021年南京高考各高中成绩及本科升学率数据排名及分析...
  9. PPT处理控件Aspose.Slides功能演示:使用 Java 在 PowerPoint 中创建和操作表格
  10. 工作两年前端经验分享