20171201(最小差值)
代码1
排序,找出每相邻两个数差值的最小值。
1 | //freopen("D://input.txt","r",stdin); |
20171202(游戏)
代码1
使用vector<bool> isOut 来表示各个小朋友是否出局, isOut[0]=true表示0+1=1号小朋友出局。int cnt=1 记录当前应该报第什么数,int outNum=0记录出局了多少个人。bool canOut(int x) 判断数字x是否可以出局。
1 | //freopen("D://input.txt","r",stdin); |
20171203(Crontab)
代码1
设计一个数据结构来表示每个任务的可满足的运行时间段和系统时间
1 | struct RunnableTime{ |
写一个函数void incTime(Time& t) 来递增系统时间。bool satisfy(const RunnableTime& rt, const Time& t) 来看rt是否在满足t时间,这个函数可能要用到星期转换的函数int getWeekDay(const Time& t) 。
对于输入,要处理, 和- 的情况。可以写一个函数pair<RunnableTime,string> dealInput(string input) 来得到时间段和任务名的对应关系,最后存储到vector<pair<RunnableTime,string>> rtToDuty 中。
1 | //freopen("D://input.txt","r",stdin); |
95分。运行超时。2个小时做完。
代码2
我可以直接用Long long 存储系统时间,减少了转换为结构体的工作;代码1是对所有时间,计算符合该时间的crontab,时间复杂度是O(时间长度*n),代码2根据每个crontab计算符合要求的时间,过程是遍历每个可能的年,每个可能的月,每个可能的日,每个可能的时,每个可能的分,看最后的时间是否在[beg, ed)内并满足星期的要求,若是,则在该时间对应的crontab set集合中插入该crontab,这个方案更好。
核心代码为:
1 | void computeCrontab(int c){//计算符合该crontab的时间,以及建立时间点到命令的映射ans |
20171204(行车路线)
代码1
这题运用Dijkstra算法,但是有一点不同时,每次计算距离,不是直接累加,而是通过完整的路径来计算,所以核心是要记录路径。vector<int> pre 来保存每个点的最短路径的前驱结点,有了这个,就有了路径。
1 | //freopen("D://input.txt","r",stdin); |
90分。错误。