CCF 201712-3 Crontab

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

#include<iostream>
#include<string>
#include<map>
#include<vector>using namespace std;
char vMon[][4] = { "","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" };
char vWek[][4] = { "sun","mon","tue","wed","thu","fri","sat" };
int monthArray[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
map<string, int> mMon, mWeek;//map string to int
map<string, vector<string>> mrt;//time -> commands //results
void bulidMonAndWeekMap() {for (int i = 1; i <= 12; i++) mMon[vMon[i]] = i;for (int i = 0; i <= 6; i++) mWeek[vWek[i]] = i;//
}
void standlize(string & s) {for (int i = 0; i<s.size(); i++) {s[i] = tolower(s[i]);}
}bool isLeapYear(int y) {return (y % 400 == 0) || (y % 4 == 0 && y % 100);
}
int getDayOfWeek(int year, int month, int dayOfMonth) {//calculate days from 1970-01-01,of which the dayOfWeek is 4.int count = 0;for (int i = 1970; i < year; i++) {count += (isLeapYear(i) ? 366 : 365);}monthArray[2] = isLeapYear(year) ? 29 : 28;for (int i = 1; i < month; i++)count += monthArray[i];count += dayOfMonth-1;return (count + 4) % 7;
}
int stoi_my(const string & a) {int r=0;for (int i = 0; i < a.size(); i++) {r = r * 10 + a[i] - '0';}return r;
}
string itos(const int & i) {char s[30];sprintf(s, "%d", i);return string(s);
}
vector<string> splitStringAndBulidVector(string& str, int TAG = 0) {//TAG=0(other),1(month),2(dayOfWeek)//transform string to vector of the num// 1-12 or 1,2.Split this by ',' and then split num with '-'.vector<string> vstring;str += ",";size_t found = str.find(',');while (found = str.find(','),found != string::npos) {string x = str.substr(0, found);str = str.substr(found + 1, str.size() - found - 1);size_t found2 = x.find('-');if (found2 == string::npos) {// one number or stringif (TAG == 1 && isalpha(x[0])) x = itos(mMon[x]);if (TAG == 2 && isalpha(x[0])) x = itos(mWeek[x]);if (x.size() == 1) {x = "0" + x;}vstring.push_back(x);}else {//1-2 or jan-feb or mon-fristring a = x.substr(0, found2);string b = x.substr(found2 + 1, x.size() - found2 - 1);int l = 0, r = 0;if (TAG == 0) { l = stoi_my(a), r = stoi_my(b); }else if (TAG == 1) {//monthl = (isalpha(a[0])) ? mMon[a] : stoi_my(a);r = (isalpha(b[0])) ? mMon[b] : stoi_my(b);}else {l = (isalpha(a[0])) ? mWeek[a] : stoi_my(a);r = (isalpha(b[0])) ? mWeek[b] : stoi_my(b);}while (l <= r) {string lstr = l<10?"0"+itos(l):itos(l);vstring.push_back(lstr);l++;}}}return vstring;
}int main()
{freopen("in.txt", "r", stdin);//get inputsbulidMonAndWeekMap();int n;string st, et;cin >> n >> st >> et;string syy = st.substr(0, 4), smm = st.substr(4, 2), sdd = st.substr(6, 2), sHH = st.substr(8, 2), sMM = st.substr(10, 2);string eyy = et.substr(0, 4), emm = et.substr(4, 2), edd = et.substr(6, 2), eHH = et.substr(8, 2), eMM = et.substr(10, 2);int syyInt = stoi_my(syy), eyyInt = stoi_my(eyy);vector<string> vminute, vhour, vdayOfMonth, vmonth, vdayOfWeek;while (n--) {string minutes, hours, dayOfMonth, month, dayOfWeek, command;cin >> minutes >> hours >> dayOfMonth >> month >> dayOfWeek >> command;standlize(month); standlize(dayOfWeek);//Transform to lower caseif (minutes == "*")minutes = "1-59";vminute = splitStringAndBulidVector(minutes);if (hours == "*")hours = "0-23";vhour = splitStringAndBulidVector(hours);if (dayOfMonth == "*")dayOfMonth = "1-31";vdayOfMonth = splitStringAndBulidVector(dayOfMonth);if (month == "*")month = "1-12";vmonth = splitStringAndBulidVector(month, 1);if (dayOfWeek == "*")dayOfWeek = "0-6";vdayOfWeek = splitStringAndBulidVector(dayOfWeek, 2);int dayOfWeekArray[7] = { 0 };// for quick queryingfill(dayOfWeekArray, dayOfWeekArray + 7, 0);for (int i = 0; i<vdayOfWeek.size(); i++)dayOfWeekArray[stoi_my(vdayOfWeek[i])] = 1;int curyear = syyInt;//Start from syyInt.Do this for each command;while (curyear <= eyyInt) {monthArray[2] = isLeapYear(curyear) ? 29 : 28;string year = itos(curyear);//iterator monthfor (vector<string>::iterator mi = vmonth.begin(); mi<vmonth.end(); mi++) {for (vector<string>::iterator di = vdayOfMonth.begin(); di<vdayOfMonth.end(); di++) {int dayOfWeekInt = getDayOfWeek(curyear, stoi_my(*mi), stoi_my(*di));//check whether dayOfWeek is right and dayOfMonth less than Maxif (!dayOfWeekArray[dayOfWeekInt] || (stoi_my(*di))>monthArray[stoi_my(*mi)])continue;//iterator hours and minutesfor (vector<string>::iterator hi = vhour.begin(); hi<vhour.end(); hi++) {for (vector<string>::iterator mini = vminute.begin(); mini<vminute.end(); mini++) {string datetime = year + *mi + *di + *hi + *mini;if (datetime >= st && datetime <= et)mrt[datetime].push_back(command);//push command into the vector of this time}}}}curyear++;}}//iterator resultsfor (map<string, vector<string>>::iterator it = mrt.begin(); it != mrt.end(); it++) {for (vector<string>::iterator rit = it->second.begin(); rit<it->second.end(); rit++) {cout << it->first + " " + *rit << endl;}}return 0;
}

转载于:https://www.cnblogs.com/SilverChen/p/9569536.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二十世纪最伟大的算法,你了解哪个?

导读&#xff1a;作者July总结了一篇关于计算方法的文章《 细数二十世纪最伟大的10大算法 》。一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known …

桌面计算机恢复出厂设置,windows7电脑怎么恢复出厂设置

我们使用电脑一段时间&#xff0c;由于各种问题&#xff0c;希望将电脑恢复出厂设置&#xff0c;那么windows7电脑怎么恢复出厂设置呢&#xff1f;下面跟着学习啦小编来一起了解下windows7电脑恢复出厂设置的方法吧。windows7电脑恢复出厂设置方法一按下开机键&#xff0c;启动…

关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法

今天朋友突然来电话&#xff0c;说自己的Exchange 2010 EMC突然报“you dont have sufficient permissions to view this data”&#xff08;您的权限不足&#xff0c;无法查看此数据&#xff09;&#xff0c;同时所有的cmdlet命令也不可以执行。询问我解决办法&#xff0c;出错…

C语言程序返回值为int的时候,不同值代表不同的意义

这个是我自己给自己的代码定的标准&#xff0c;方便自己阅读与编码。他人代码情况不可套用 1  执行成功 0  出现错误&#xff0c;不影响程序执行 -1  执行失败 -2  程序内部致命错误&#xff0c;退出程序转载于:https://www.cnblogs.com/kgtone/p/9570388.html

内存为什么还有管理?

本文作者&#xff1a;度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的&#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同&#xff0c;不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友&…

ajax html fileupload,fileUpload.html

文件上传测试说明: 最大上传量:100M&#xff0c;单个文件最大长度:100Menctype"multipart/form-data" method"post">Element.hide(progressBar);Event.observe(fileUploadForm,submit,startProgress,false);Event.observe(cancelUploadButton,click,ca…

HDOJ1106 排序

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1106 代码: #include<stdio.h> #include<string.h> #include<stdlib.h> int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b; } int main(){ char s[1001]; int len,i,sum,cnt; …

TCP实现可靠传输

1. TCP 和 UDP的区别&#xff1a; TCP面向连接&#xff1b;UDP无连接TCP保证数据的可靠传输&#xff0c;数据传送无差错&#xff0c;不丢失&#xff0c;无重复&#xff0c;按序到达&#xff1b;UDP不保证可靠交付TCP连接一对一&#xff1b;UDP支持更广泛UDP实时性好&#xff0c…

旧手机别扔,手把手教你DIY一台Linux服务器

作者&#xff1a;Hannah Lee编译&#xff1a;弯月 欧阳姝黎来源&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机上搭建一台备份服务器。旧手机的污染问题众所周知&#xff0c;我有一台旧…

学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...

GTX1650显卡在2019年4月22日进行发售&#xff0c;不少用户认为GTX1650是智商检测卡&#xff0c;真的是吗&#xff1f;从命名上来看&#xff0c;GTX1650应该是GTX1050的升级产品&#xff0c;不过根据英伟达的说法&#xff0c;GTX1650相比GTX1050提升幅度达到了70%&#xff0c;但…

Cacti Plugin Architecture安装

1.下载Cacti PluginArchitecture ,http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7g-PA-v2.8.tar.gz2.解压Cacti Plugin Architecture 3.安装cd cacti-plugin-archcp cacti-plugin-0.8.7b-PA-v2.1.diff /var/www/cactipatch -p1 -N < cacti-plugin-0.8.…

P1547 Out of Hay

传送门 练习 只是一个最小生成树的水题&#xff0c;拿来练练模板 AC代码&#xff1a; #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; #define maxn 10001 struct hh {int x,y,z; }t[maxn]; int …

研发转FAE,要想清楚

说个事情吧因为今天有个同学跟我说&#xff0c;自己想转去做FAE。他最近刚面试了一个FAE的岗位&#xff0c;那边感觉挺缺人了&#xff0c;感觉那边领导也比较喜欢自己&#xff0c;想让他快点去那边。然后我就跟他聊了下首先&#xff0c;过去做FAE的岗位就是一个大头兵&#xff…

Gamma的传说

Gamma校正对于图形和图像来说是个常提的概念&#xff0c;但对于gamma的缘由和使用方法&#xff0c;却存在着很多传说。本文将尽可能解析gamma校正来源&#xff0c;破解各种迷思。Gamma校正从何而来 有一种常见的说法&#xff0c;gamma来源于眼睛对光感受。我也曾经错误地采用了…

计算机网络在实践中的应用,计算机网络技术及在实践中的应用

摘 要隨着社会的快速发展&#xff0c;计算机网络技术也得到迅猛发展&#xff0c;计算机网络技术已经广泛应用于人们的生活和工作中。如今&#xff0c;计算机网络技术已经趋向成熟&#xff0c;应用范围也在不断扩大。计算机网络技术实际上是以下几种技术的结合&#xff1a;一是计…

进程中的一个线程死了所引发的后果

我们知道&#xff0c;同一个进程中的多个线程共享进程资源&#xff0c;包括主内存、文件句柄、锁资源等。那么当一个线程死了&#xff08;非正常退出、死循环等&#xff09;就会导致线程该占有的资源永远无法释放&#xff0c;从而影响其他线程的正常工作&#xff0c;看下面一个…

心急吃不了热豆腐

良好的焊接是保证电路稳定持久工作的前提。下面给出了常见到的焊接缺陷。看看你遇到过多少种&#xff1f;▲ 图1 焊接中的常见问题▲ 图2 锡珠▲ 图3 扰动的焊接&#xff1a;在焊接点冷却过程中焊锡移动&#xff0c;造成焊接表面起雾、结晶、粗糙▲ 图4 立碑▲ 图5 冷结&…

ICON资源

http://openiconlibrary.sourceforge.net/downloads.html http://commons.wikimedia.org/wiki/Crystal_Clear&#xff08;强烈推荐&#xff09; http://www.everaldo.com/crystal/ http://www.iconspedia.com/&#xff08;很多国外nb的设计师&#xff0c;强烈推荐) http://www.…

会议升降计算机主机,升降式无纸化多媒体会议系统

升降式无纸化多媒体会议系统&#xff0c;我们将全面贯彻执行现代化企业管理理念以及“一站式****”的服务理念&#xff0c;内强素质外树形象&#xff0c;随时为全球广大客户提供更超值的产品与服务&#xff0c;更好更快得促进企业的稳健快速发展。精品主题&#xff0c;实战科普…

给电子类大学生一点求职建议

‍读大学的时候应该想清楚以后要干嘛&#xff0c;不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会&#xff0c;这个数字多少会给你点压力吧。因为我是专业对口的&#xff0c;所以我就从对口的角度&#xff0c;说下我们电子信息类专业学的啥以及怎么学。有很多人在…