CCF-Crontab-201712-3
大概是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的更多相关文章
- ccf 201712-3 Crontab(Python实现)
一.原题 问题描述 试题编号: 201712-3 试题名称: Crontab 时间限制: 10.0s 内存限制: 256.0MB 问题描述: 样例输入 3 201711170032 201711222 ...
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- crontab介绍
1.Cron的启动与关闭 由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务: /sbin/service crond start //启动服务/sbin/se ...
- 使用python crontab设置linux定时任务
熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...
- 浅谈 linux 例行性工作 crontab (linux定时任务)
定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...
- 用Crontab打造简易工作流引擎
1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...
- Linux crontab定时器的使用
crontab参数: -u:帮助其他用户建立或移除工作排程 -l:查阅crontab的工作内容 -r:移除所有的crontab的工作内容 -e:编辑crontab文件 每项工作有六个字段: * * * ...
- crontab 启动 、运行 和编辑 查看
cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbi ...
- Linux下使用crontab定时备份日志
上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...
- Linux下实现秒级的crontab定时任务
crontab的格式如下 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...
随机推荐
- jdk 版本切换
由于要创建一个新的项目,启动时报错了,Spring boot 启动报错 Unsupported major.minor version 52.0,是因为jdk版本太低了,从目前是1.7,我已经安装过了 ...
- Oracle查询语句导致CPU使用率过高问题处理
解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...
- 利用Delphi编写Socket通信程序
一.Delphi与Socket 计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登 ...
- 工作VUE布局记录
以这个页面为例子 这个是你的布局有多少行,这个页面有两行,这里是2 这里span是占用多少格(一共24格)offset左右偏移,这个基本上用不到row是表示这个控件在第几行,如果是在第 ...
- Apache安装,亲测成功
工作需要,为一台空白服务器安装apache,小白程序员,搞了一个下午,惭愧! 工具需要,也可以自己到apache下载 http://httpd.apache.org/download.cgi 遇到的b ...
- 【一:定义】python 简介
[python基础介绍的比较好的link] https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac927076 ...
- servlet中常用到的工具
1. 解析ajax传来的json字符串,得到json对象 private JSONObject getJsonObject(HttpServletRequest req) { StringBuffer ...
- jQuery 入口函数主要有4种写法
jqery 入口函数主要有4种写法,其中以第3种方法最为方便. <!DOCTYPE html> <html lang="en"> <head> ...
- Java randomString
public static String randomString(int strLength) { Random rnd = ThreadLocalRandom.current(); StringB ...
- java版数据结构与算法第二章数组
数组由一组具有相同类型的数据元素组成,并存储在一组连续存储单元中.一维数组是常量. 二维数组:若一维数组中的数据元素又是一堆数据结构,我们称之为二维数组.二维数组可以看成是n个列向量组成的线性表. 数 ...