大概是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. 如何不使用loop循环创建连续的数组

    ES5 Array.apply(null,{length:100}) Object.keys(Array.apply(null,{length:100})); ES6 [...Array(100)]

  2. jQuery获取name相同被选中的多选框的值

    var name= "";            $("input:checkbox[name='AllElection']:checked").each(fu ...

  3. JDBCUtils——原生

    需要导入的包: mysql-connector-java-5.1.37-bin.jar import java.sql.Connection; import java.sql.DriverManage ...

  4. 搭建本地yum源

    本地yum源其实非常容易搭建 首先进入/etc/yum.repos.d/ 将原来的yum源备份后移除,然后新建dvd.repo: 内容如下: [base] name=base baseurl=file ...

  5. python 全栈开发笔记 1

    将自己的姓名用进制表示出来 #自己姓名的进制表示 name=input('请输入你的名字:') for i in name: print(i) # python 3 中是按字符进行循环的 bytes_ ...

  6. Problem 8: Largest product in a series

    先粘实现代码,以后需要再慢慢补充思路 s = ''' 73167176531330624919225119674426574742355349194934 9698352031277450632623 ...

  7. ionic2APP 如何处理返回键问题

    1.APP中难免会有自定义各种modal.alert,modal或alert处于激活状态时android用户按物理返回键,页面被返回,而这些弹窗切没有被返回,一种解决办法是可以在每个组件内用生命周期钩 ...

  8. cocos-lua3.17 Lua tablrView工具类

    local MyTableView = class("MyTableView") MyTableView.__index = MyTableView MyTableView.pro ...

  9. 《贝贝GO》服务条款

    服务条款 一.服务条款的确认与接收 1.贝贝GO客户端软件(以下简称“本软件”)各项电子服务的所有权和运作权归属于“东莞市山水信息技术有限公司”(以下称“本公司”)所有,本软件提供的服务将完全按照其发 ...

  10. winform 写入txt(可以连续性的在文本内容后面追加)

    在上一篇写入txt的时候,不可以在后面追击,调用一次,以前的同名的文本就会覆盖掉.这次的功能会修改上次这个小bug StreamWriter sw = new StreamWriter("D ...