洋Key 2019-03-01 16:50 采纳率: 0%
浏览 1549

CSP认证2018-12月第二题,找不出问题,提交上去就是0分,望大神解答~

图片说明
图片说明

代码如下:
#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分,希望大神可以帮忙解答,万分感谢!!

  • 写回答

1条回答 默认 最新

  • 洋Key 2019-03-01 20:02
    关注

    找到问题所在啦,首先数组越界,而且数组完全没有必要,下面的while循环也没有必要,占用太多的资源了。。。。当时脑子瓦特了,附上通过代码

    #include <iostream> 
    using namespace std;
    typedef long long ll;
    
    ll toPositive(ll num, ll cycle)
    {
        while(num < 0)
        {
            num += cycle;
        }
        return num;
    }
    
    int main()
    {
        ll r, y, g;
        cin >> r >> y >> g;
        const ll cycle = r+y+g;
        ll n;
        cin >> n;
        ll sum = 0;
        for(ll i = 0; i < n; i++)
        {
            ll k, t;
            cin >> k >> t;
            if(0 != k)
            {
                ll flag;
                switch(k)
                {
                    case 1 : flag = 0; break;
                    case 2 : flag = r; break;
                    case 3 : flag = r+y; break;
                    default : return 0;
                }
                ll index = toPositive(sum-t-flag, cycle) % cycle;
                if(index < g)
                    t =0;
                else
                    t = cycle-index;
            }
            sum += t;
        }
        cout << sum << endl;
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计