大概是CCf第三题中最麻烦的一个吧

我的思路其实我觉得还可以,模拟...可是超时了233 只有90分 [ 可是我看网上其他人也是模拟算法啊,

速度还是太慢了 120行, 1个半小时  大部分花在了debug上了

总结: debug时 不要直接看中间结果,先自己仔细读一遍程序,很多bug不是逻辑错误,而是自己不细心....加油!!

 #include <bits/stdc++.h>
using namespace std;
struct node {
string name;
bool isok[][];
};
node ord[];
int mon[][]={,,,,,,,,,,,,,
,,,,,,,,,,,,};
string smon[]={"","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
string swek[]={"sun","mon","tue","wed","thu","fri","sat"};
map <string,int> mapp;
int t[]={,,,,,}; // min 0,hou 1,day 2,mon 3,week 4,year 5
int ts[],te[];
int base[]={,,,};
bool is_r (int year) {
if (year%==&&year%!=||year%==) return ;
return ;
}
void dd(int k) {
bool flag=is_r(t[]);
base[]=mon[flag][t[]];
for (int i=;i<=;i++) {
int tmp=t[i]+k;
k=tmp/base[i];
t[i]=tmp%base[i];
}
for (int i=;i<=;i++) {
if (i==) t[]=(t[]+k)%;
int tmp=t[i]-+k;
k=tmp/base[i];
t[i]=tmp%base[i]+;
}
t[]+=k;
}
int to_int (string str) {
int ans=;
for (int i=;i<str.size();i++)
ans=ans*+str[i]-'';
return ans;
}
void get_t(string str,int* x) {
x[]=to_int(str.substr(,));
for (int i=,pos=;i>=;i--,pos+=)
x[i]=to_int(str.substr(pos,));
}
bool is_same (int *x,int *y) {
for (int i=;i<=;i++)
if (x[i]!=y[i]) return ;
return x[]==y[];
}
vector <string> split(string str,const char flag=',') {
vector <string> ans;
istringstream iss(str);
while (getline(iss,str,flag)) {
if (str.size()) {
for (int i=;i<str.size();i++)
if (str[i]>='A'&&str[i]<='Z')
str[i]=str[i]-'A'+'a';
ans.push_back(str);
}
}
return ans;
}
int get_num (string str) {
if (str[]>=''&&str[]<='') return to_int(str);
return mapp[str];
}
void get_isok(string str,bool* isok) {
if (str=="*") {
for (int i=;i<=;i++) isok[i]=;
return ;
}
vector <string> sv=split(str);
for (int i=;i<sv.size();i++) {
string tmp=sv[i];
int pos=tmp.find("-");
if (pos==-) isok[get_num(tmp)]=;
else {
string s1=tmp.substr(,pos),s2=tmp.substr(pos+);
int l1=get_num(s1),l2=get_num(s2);
for (int j=l1;j<=l2;j++)
isok[j]=;
}
}
}
bool isok(node x) {
for (int i=;i<;i++)
if (!x.isok[i][t[i]]) return ;
return ;
}
int main ()
{
ios::sync_with_stdio(false);
for (int i=;i<=;i++) mapp[smon[i]]=i;
for (int i=;i<;i++) mapp[swek[i]]=i;
int n; string _s,_e;
cin>>n>>_s>>_e;
get_t(_s,ts); get_t(_e,te);
t[]=ts[]; t[]=ts[];
while (!is_same(t,ts)) dd(*);
for (int i=;i<=n;i++) {
for (int j=;j<;j++) {
string str; cin>>str;
get_isok(str,ord[i].isok[j]);
}
cin>>ord[i].name;
}
while (!is_same(t,te)) {
for (int i=;i<=n;i++)
if (isok(ord[i])) {
cout<<t[];
for (int j=;j>=;j--)
cout<<setw()<<setfill('')<<t[j];
cout<<" "<<ord[i].name<<"\n";
}
dd();
}
return ;
}

CCF-Crontab-201712-3的更多相关文章

  1. ccf 201712-3 Crontab(Python实现)

    一.原题 问题描述 试题编号: 201712-3 试题名称: Crontab 时间限制: 10.0s 内存限制: 256.0MB 问题描述: 样例输入 3 201711170032 201711222 ...

  2. CCF认证历年试题

    CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...

  3. crontab介绍

    1.Cron的启动与关闭 由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务: /sbin/service crond start           //启动服务/sbin/se ...

  4. 使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...

  5. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  6. 用Crontab打造简易工作流引擎

    1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...

  7. Linux crontab定时器的使用

    crontab参数: -u:帮助其他用户建立或移除工作排程 -l:查阅crontab的工作内容 -r:移除所有的crontab的工作内容 -e:编辑crontab文件 每项工作有六个字段: * * * ...

  8. crontab 启动 、运行 和编辑 查看

    cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbi ...

  9. Linux下使用crontab定时备份日志

    上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...

  10. Linux下实现秒级的crontab定时任务

    crontab的格式如下 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...

随机推荐

  1. python练习小文章-文本爬虫

    一入“程”门深四海...... 有学习就得有练习,我来练一个文本爬虫,代码直接写到下面,抓取的是网页图片,简单好学,适合新手练习. 话不多说直接上干货! 1. 目标网址:https://www.jik ...

  2. day48-python爬虫学习三

    Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...

  3. Oracle角色,权限,表空间基础语句

    控制台: -sqlplus         -----连接数据库 -conn sys/123456@orcl as sysdba        -----登录sys -create tablespac ...

  4. C#异常:未将对象引用设置到对象的实例。

    异常:未将对象引用设置到对象的实例. 一般是定义的变量或者数组等,没有赋初始值. 赋初始值后问题解决.

  5. 简述我理解的C#

    第一章:开发入门 一.基础知识    1.计算机语言发展进程:计算机语言大致经过了机器语言.汇编语言.高级语言三个阶段的发展历程. 汇编语言:使用助记符来替代机器指令机器语言这种反人类的设计,阻碍了软 ...

  6. js 发送http请求

    // 1.创建 XHR对象(IE6- 为ActiveX对象) // 2.连接及发送请求 // 3.回调处理 function createXMLHttpRequest() {     var xhr; ...

  7. 获取百度地图POI数据一(详解百度返回的POI数据)

    POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数 ...

  8. 结对作业收获_core组

    收获:编码之前必须的思考是逃不掉的,而且这一步是磨刀不误砍柴工,而且会加速以后的步骤 分析: 首要重要的事情是:需要完成的功能,理清逻辑关系.我们要随机产生一定要求的算式,并且计算出算式的值. 其次的 ...

  9. 使用kermit通过串口升级uboot

    在开发板的启动选项中看到如下两行: 7: Load Boot Loader code then write to Flash via Serial. 9: Load Boot Loader code ...

  10. Problem 9: Special Pythagorean triplet

    flag = 0 for a in range(1,1000): for b in range(a+1,1000): if a*a + b*b == (1000-a-b)**2: print(a,b) ...