代码如下:
#include <iostream>
using namespace std;
// 这里自定义一个函数让下面的索引变为非负整数
long toPositive(long num, long cycle)
{
while(num < 0)
{
num += cycle;
}
return num;
}
int main(int argc, char* argv[])
{
long r, y, g;
cin >> r >> y >> g;
const long cycle = r+y+g;
//定义一个数组来存储各个红绿灯的状态
long array[cycle];
for(long i = 0; i < g; i++)
array[i] = 3;
for(long i = 0; i < y; i++)
array[g+i] = 1;
for(long i = 0; i < r; i++)
array[g+y+i] = 2;
long n;
cin >> n;
long sum = 0;
for(long i = 0; i < n; i++)
{
long k, t;
cin >> k >> t;
//这里只要 k不是0,我们就去查表
if(0 != k)
{
long flag;
switch(k)
{
case 1 : flag = 0; break;
case 2 : flag = r; break;
case 3 : flag = r+y; break;
default : return 0;
}
long index = toPositive(sum-t-flag, cycle) % cycle;
long temp = 0;
//只要循环不结束那么说明还要等待下一秒红灯或者黄灯
while(index < cycle && array[index] != 3)
{
temp += 1;
index++;
}
t = temp;
}
sum += t;
}
cout << sum << endl;
return 0;
}
用好多数测试了,感觉没什么问题,但是提交上去就是0分,希望大神可以帮忙解答,万分感谢!!