大概是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. 利用IIS部署WEB网站以及解决CSS/JS不能显示问题

    利用IIS部署WEB网站以及解决CSS/JS不能显示问题 转载声明:http://blog.sina.com.cn/s/blog_a001e5980101b4kt.html vs中正常IIS发布网站后 ...

  2. 9ci

  3. Java之冒泡排序(升序)

    Java之冒泡排序 * 编辑者:鸿灬嗳 * 实现功能: 使用冒泡排序对数组:{25,24,12,76,101,96,28} 排序. */ package test05; public class Bu ...

  4. cdh日常维护常见问题及解决方案

    为数据节点添加新硬盘 - 挂载硬盘到指定文件夹.如`/dfs_diskb`: - 打开cloudera manager -> hdfs -> 配置 -> DataNode -> ...

  5. Ubuntu16.04下安装OpenCV3.2.0

    1.安装官方给的opencv依赖包 $ sudo apt-get install build-essential $ sudo apt-get install cmake git libgtk2.0- ...

  6. jedis连接池参数minEvictableIdleTimeMillis和softMinEvictableIdleTimeMillis探索

    我们通常在使用JedisPoolConfig进行连接池配置的时候,minEvictableIdleTimeMillis和softMinEvictableIdleTimeMillis这两个参数经常会不懂 ...

  7. 本周HTML5的知识点

    html5一般用<meta>标签描述网页的摘要信息.标题标签一共有6个,标题字体加粗<h1>最大,<h6>最小. <p>标签标示内容都在一行显示,结束后 ...

  8. poj1002总结

    1.之前一直是runtime error,没有找出具体原因,把冒牌排序改成了合并排序,当输入是100000行时,从大约10s变到1s内 2.感觉是atoi指针导致的,当判断atoi的入参不为NULL时 ...

  9. 什么是 SaaS (Software as a Service)

    什么是SaaS (Software as a service ) 把软件作为一个服务.SaaS是一种cloud-based 和通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用 ...

  10. rabbitmq web 管理系统的信息

    rabbitmq web 管理系统的信息   端口 15672 帐号密码 guest/guest 要开启web 管理, 需要手动执行命令: rabbitmq-plugins enable rabbit ...