河北网站开发网站搜索引擎优化seo课程总结
1、小明上学
题目链接:https://sim.csp.thusaac.com/contest/15/problem/0
本题是模拟红绿灯计时的题,根据红绿灯转换规则可知,红灯后面通常是绿灯,绿灯后面是黄灯,黄灯过后又是红灯。根据题意,当k = 0时,表示小明经过一段道路,此时进行计时操作;当k = 1时,表示小明看到了一个红灯,此时进行计时操作;当k = 2时,表示小明看到了一个黄灯,此时计时操作包括黄灯和红灯的计时;当k = 3时,表示小明看到了一个绿灯,此时可以直接通过,不用进行计时操作。
100分代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int r,y,g;cin >> r >> y >> g; int n;cin >> n;int k[110],t[110];for(int i = 0; i < n; i++){cin >> k[i] >> t[i];}int sum = 0;for(int i = 0; i < n; i++){if(k[i] == 0 || k[i] == 1)sum += t[i];else if(k[i] == 2)sum += t[i] + r;}cout << sum << endl;return 0;
}
评测结果:
2、小明放学
题目链接:https://sim.csp.thusaac.com/contest/15/problem/1
本题难度比第一题增加了不少,小明在放学时已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。当经过一段道路时,进行计时操作即可。当经过红绿灯时,需要考虑红绿灯转换的周期问题,红灯、黄灯和绿灯都亮过后算一个周期,具体的周期转换情况如下图所示:
情况1 | |||||||||||
t | g | y | r | g | y | r | g | y | r | g | y |
5 | 30 | 3 | 30 | 30 | 3 | 30 | 30 | 3 | 30 | 30 | 3 |
红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 |
等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 |
情况2 | |||||||||||
t | r | g | y | r | g | y | r | g | y | r | g |
2 | 30 | 30 | 3 | 30 | 30 | 3 | 30 | 30 | 3 | 30 | 30 |
黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 |
等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 |
情况3 | |||||||||||
t | y | r | g | y | r | g | y | r | g | y | r |
10 | 3 | 30 | 30 | 3 | 30 | 30 | 3 | 30 | 30 | 3 | 30 |
绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 | 绿 | 黄 | 红 |
通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 | 通过 | 等待 | 等待 |
对于红绿灯周期转换过程中的计时问题,可以运用求模运算解决。
如果不会正解的话,可以根据测试点拿分,前 2 个测试点中不存在任何信号灯,所以只需在经过每一段道路时进行计时操作即可,轻轻松松20分就到手了。
20分代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int r,y,g;cin >> r >> y >> g;int n;cin >> n;int k,t;long long sum = 0;for(int i = 1; i <= n; i++){cin >> k >> t;sum += t; }cout << sum << endl; return 0;
}
评测结果:
100分代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int r,y,g;cin >> r >> y >> g;int n;cin >> n;int k,t;long long sum = 0;for(int i = 1; i <= n; i++){cin >> k >> t;if(k == 0)sum += t; else if(k == 1){if(sum < t + g + y){if(sum % (t + g + y) < t)sum += t - sum % (t + g + y);else if(sum % (t + g + y) >= t && sum % (t + g + y) < t + g)sum += 0;else if(sum % (t + g + y) >= t + g && sum % (t + g + y) < t + g + y)sum += t + g + y + r - sum % (t + g + y); }else if(sum >= t + g + y){if((sum - (t + g + y)) % (r + g + y) < r)sum += r - (sum - (t + g + y)) % (r + g + y);else if((sum - (t + g + y)) % (r + g + y) >= r && (sum - (t + g + y)) % (r + g + y) < r + g)sum += 0;else if((sum - (t + g + y)) % (r + g + y) >= r + g && (sum - (t + g + y)) % (r + g + y) < r + g + y)sum += r + g + y + r - (sum - (t + g + y)) % (r + g + y); }}else if(k == 2){if(sum < t + r + g){if(sum % (t + r + g) < t)sum += t + r - sum;else if(sum % (t + r + g) >= t && sum % (t + r + g) < t + r)sum += t + r - sum % (t + r + g); else if(sum % (t + r + g) >= t + r && sum % (t + r + g) < t + r + g)sum += 0; }else if(sum >= t + r + g){if((sum - (t + r + g)) % (y + r + g) < y + r)sum += y + r - (sum - (t + r + g)) % (y + r + g);else if((sum - (t + r + g)) % (y + r + g) >= y + r && (sum - (t + r + g)) % (y + r + g) < y + r + g)sum += 0; }}else if(k == 3){if(sum < t + y + r){if(sum % (t + y + r) < t)sum += 0;else if(sum % (t + y + r) >= t && sum % (t + y + r) < t + y + r)sum += t + y + r - sum % (t + y + r); }else if(sum >= t + y + r){if((sum - (t + y + r)) % (g + y + r) < g)sum += 0;else if((sum - (t + y + r)) % (g + y + r) >= g && (sum - (t + y + r)) % (g + y + r) < g + y + r)sum += g + y + r - (sum - (t + y + r)) % (g + y + r); }}}cout << sum << endl; return 0;
}
评测结果: