bsjmxg 2023-05-11 23:18 采纳率: 75%
浏览 18

csp测试之小明放学

img

评测用例规模与约定
  有些测试点具有特殊的性质:
  * 前 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;

}



  • 写回答

1条回答 默认 最新

  • threenewbee 2023-05-11 23:42
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏