CSP认证201812-2小明放学
题目分析:
该题一个坑是int型是存不下的,定义为long long 就可以了。
交通灯循环规律:红---->绿---->黄---->红---->绿---->黄
1、定义一个数组a,a[1]表示红;a[2]表示黄等;a[3]表示绿灯。
2、if(bit == 0) sum += t;
3、除了bit = 0时,其他情况我们需要找到当前是什么灯亮:
temp = t - (sum % ryg) // ryg表示黄灯 + 红灯 + 绿灯时间的总和。
这样就可以在一个循环内找到当时状态:
while (temp <= 0) {
if (bit == 1) bit = 3;
else bit = bit - 1;
temp += a[bit];
}
代码:
#include <stdio.h>
#include <inttypes.h>
int main() {
long long a[4], n, bit, t;
scanf("%lld%lld%lld", &a[1], &a[2], &a[3]);
long long ryg = a[1] + a[2] + a[3];
scanf("%lld", &n);
long long sum = 0;
for (long long i = 0; i < n; i++) {
scanf("%lld%lld", &bit, &t);
if (bit == 0) {
sum += t;
continue;
}
long long temp = t - (sum % ryg);
while (temp <= 0) {
if (bit == 1) bit = 3;
else bit = bit - 1;
temp += a[bit];
}
if (bit == 2) {
sum += temp + a[1];
}
else if (bit != 3) {
sum += temp;
}
}
printf("%lld\n", sum);
return 0;
}