CCF-CSP 201812-1 小明上学

📅 2026/7/28 14:33:33
CCF-CSP 201812-1 小明上学
题目背景小明是汉东省政法大学附属中学的一名学生他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠他希望能够预计自己上学所需要的时间。他上学需要经过数段道路相邻两段道路之间设有至多一盏红绿灯。京州市的红绿灯是这样工作的每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定为红灯 r 秒黄灯 y 秒绿灯 g 秒那么从 0 时刻起[0,r) 秒内亮红灯车辆不许通过[r, rg) 秒内亮绿灯车辆允许通过[rg, rgy) 秒内亮黄灯车辆不许通过然后依次循环。倒计时的显示牌上显示的数字 ll 0是指距离下一次信号灯变化的秒数。问题描述一次上学的路上小明记录下了经过每段路的时间和各个红绿灯在小明到达路口时的颜色和倒计时秒数。希望你帮忙计算此次小明上学所用的时间。输入格式输入的第一行包含空格分隔的三个正整数 r、y、g表示红绿灯的设置。这三个数均不超过 106。输入的第二行包含一个正整数 nn ≤ 100表示小明总共经过的道路段数和看到的红绿灯数目。接下来的 n 行每行包含空格分隔的两个整数 k、t。k0 表示经过了一段道路耗时 t 秒此处 t 不超过 106k1、2、3 时分别表示看到了一个红灯、黄灯、绿灯且倒计时显示牌上显示的数字是 t此处 t 分别不会超过 r、y、g。输出格式输出一个数字表示此次小明上学所用的时间。样例输入30 3 3080 101 50 112 20 60 33 100 3样例输出70样例说明小明先经过第一段道路用时 10 秒然后等待 5 秒的红灯再经过第二段道路用时 11 秒然后等待 2 秒的黄灯和 30 秒的红灯再经过第三段、第四段道路分别用时6、3秒然后通过绿灯再经过最后一段道路用时 3 秒。共计 10 5 11 2 30 6 3 370 秒。评测用例规模与约定测试点 1, 2 中不存在任何信号灯。测试点 3, 4 中所有的信号灯在被观察时均为绿灯。测试点 5, 6 中所有的信号灯在被观察时均为红灯。测试点 7, 8 中所有的信号灯在被观察时均为黄灯。测试点 9, 10 中将出现各种可能的情况。经验总结红绿灯的时间不超过106对于绿灯来说不管时间多大都无所谓。主要看黄灯和红灯当遇到红灯时需要等红灯剩余时间。当遇到黄灯时除了要等待黄灯剩余时间外还要等待红灯剩余时间假设一个极端例子所给的nn100个数据每个都是黄灯且黄灯和红灯时间均为106那么极端所用时间应该为2x106x100≈108。没超过int最大值。所以用int型是满足的但如果考试时时间紧迫且无法考虑那么多那么用long long吧省心。C代码#includebits/stdc.husing namespace std;intmain(){intr,y,g,n,k,t,sum0;scanf(%d %d %d %d,r,y,g,n);while(n--){scanf(%d %d,k,t);switch(k){case0:case1:sumt;break;case2:sumrt;break;}}printf(%d,sum);return0;}