评测用例规模与约定
有些测试点具有特殊的性质:
* 前 2 个测试点中不存在任何信号灯。
测试点的输入数据规模:
* 前 6 个测试点保证 n ≤ 103。
* 所有测试点保证 n ≤ 105。
用给的例子测试可以运行 但是提交只有20分,显示错误 是什么原因
我的思路是对灯改变颜色之后取余判断现在是什么颜色的灯
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r,y,g;
scanf("%d %d %d",&r,&y,&g);
int n;
scanf("%d",&n);
int k[n],t[n];
int i=0;
long long int sum=0;
int x0;
for(i=0;i<n;i++){
scanf("%d %d",&k[i],&t[i]);
}
for(i=0;i<n;i++){
if(k[i]==0){
sum+=t[i];
}
if(k[i]==1){
if(t[i]>sum)//r
{
sum+=t[i]-sum;
}
else
{
x0=(sum-t[i])%(r+y+g);
if(x0<y)//y
{
sum+=r-x0;
}
if(x0>y&&x0<y+g)//g
{
sum+=0;
}
if(x0>y+g)//r
{
sum+=y+r-(sum-t[i]-y-g);
}
}
}
if(k[i]==2){
if(t[i]>sum)//y
{
sum+=t[i]-sum;
}
else{
x0=(sum-t[i])%(r+y+g);
if(x0<y)//y
{
sum+=y-x0;
}
if(x0>y&&x0<y+g)//g
{
sum+=0;
}
if(x0>y+g&&x0<r+y+g)//r
{
sum+=r+y+g-x0;
}
}
}
if(k[i]==3)//g
{
if(t[i]>sum){
sum+=0;
}
else{
x0=(sum-t[i])%(r+y+g);
if(x0<r)//r
{
sum+=y+r-x0;
}
if(x0>r&&x0<r+y){
sum+=r+y-x0;
}
if(x0>r+y){
sum+=0;
}
}
}
}
printf("%lld",sum);
return 0;
}