2021/2/8 CCF练习201812(c++)

201812-1
#include
using namespace std;
#define MAX 1000
int a[MAX][2];
int main()
{
int r,y,g,n;
cin>>r>>y>>g;
cin>>n;
int sum=0;
for(int i=0;i<n;i++)
{
int k,t;
cin>>k>>t;
a[i][0]=k;
a[i][1]=t;
if(k0||k1)
sum+=a[i][1];
else if(k==2)
sum=sum+t+r;
else
sum=sum;
}
cout<<sum<<endl;
return 0;
}
201812-2
(20分错误代码)
#include
using namespace std;
int r,y,g,n;
int k,t;
long long sum=0;
int judge(long long tt)
{
if(tt>=0 && tt<r) return 1; //红灯
if(tt>=r+g && tt<r+g+y) return 2; //绿灯
if(tt>=r && tt<r+g) return 3; //黄灯
}

int main()
{
cin>>r>>y>>g;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>k>>t;
if(k0)
sum+=t;
else if(k
1)
{
//刚开始这里是红灯,判断此时会变成什么灯
long long tt=r-t;
tt=(tt+sum)%(r+y+g);
int flag=judge(tt);
if(flag1)
sum+=r-tt;
else if(flag
2)
sum+=r+y+g-tt+r;
}
else if(k2)
{
long long tt=r+g+y-t;
tt
(tt+sum)%(r+y+g);
int flag=judge(tt);
if(flag1)
sum+=r-tt;
else if(flag
2)
sum+=r+y+g-tt+r;
}
else if(k3)
{
long long tt=r+g-t;
tt
(tt+sum)%(r+y+g);
int flag=judge(tt);
if(flag1)
sum+=r-tt;
else if(flag
2)
sum+=r+y+g-tt+r;
}
else
cout<<“ERROR”<<endl;
}
cout<<sum<<endl;
return 0;
}

(100分代码)
不懂

#include
using namespace std;
int main(){
// freopen(“1.txt”,“r”,stdin);
int A[3];
//A[0]为红灯,A[1]为绿灯,A[2]为黄灯
int n,k,t,total=0;
scanf("%d%d%d%d",&A[0],&A[2],&A[1],&n);
total=A[0]+A[1]+A[2];
long long cnt=0;
while(n–){
scanf("%d%d",&k,&t);
if(k0) cnt+=t;
else if(k
1||k2){//红灯
if(k
2) t+=A[0];
if(cnt<=t) cnt+=(t-cnt);
else{
int left=(cnt-t)%total,i;
for(i=1;left>=A[i];i=(i+1)%3)
left-=A[i];
if(i2) cnt+=(A[2]-left+A[0]);
else if(i
0) cnt+=(A[0]-left);
}
}
else{
if(cnt>t){
t+=(A[0]+A[2]);
if(cnt<=t) cnt+=(t-cnt);
else{
int left=(cnt-t)%total,i;
for(i=1;left>=A[i];i=(i+1)%3)
left-=A[i];
if(i2) cnt+=(A[2]-left+A[0]);
else if(i
0) cnt+=(A[0]-left);
}
}
}
}
printf("%lld",cnt);
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40395925/article/details/113757508