首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌KickStart绕行B路问题的错误答案?

谷歌KickStart绕行B路问题的错误答案?
EN

Stack Overflow用户
提问于 2020-05-16 22:18:06
回答 2查看 578关注 0票数 1

我在练习谷歌的kickstart的B型公交线路问题。实际上,我看了他们的分析,并实施了他们的替代答案。

我还会将问题提示粘贴到代码下面。https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc8/00000000002d83bf

我的解决方案通过了第一个测试集,但是在第二个测试集上得到了错误的答案。我不知道第二个测试集是什么,只是它很大。我很困惑,因为我的解决方案遵循对问题的分析,实际上是对T提供的替代解决方案的实现。我也不知道如何找出哪个测试用例可能会给出错误的答案,似乎有这么多的可能性!

我甚至不知道如何调试这样一个模糊的答案。也许有一些我没有考虑的边缘案件?

代码语言:javascript
复制
    #include <iostream> // includes cin to read from stdin and cout to write to stdout
        #include <bits/stdc++.h> 

        using namespace std; 

        int main() {
          int t, n, d;

          cin >> t; // read t. cin knows that t is an int, so it reads it as such.

          for (int i = 1; i <= t; ++i) {
            cin >> n >> d; // read n and then m.

            stack <int> bus;


            for(int j=0; j<n; j++){
                int x;
                cin >> x;
                bus.push(x);
            }


            while(!bus.empty()){
                int b = bus.top();
                bus.pop();
                d = d -  d%b;

            }

            cout << "Case #" << i << ": " << d << endl;

          }

          return 0;
        }

*这里是问题提示符*的简短版本

问题桶正计划乘公共汽车穿越乡村进行一段很长的旅程。她的旅程包括N条公共汽车路线,按她必须乘坐的顺序从1到N编号。公共汽车本身非常快,但不经常行驶。第一条公交线路每十一天才开一次.

更确切地说,她只能在第一天乘坐第一班公交车,如:习、2Xi、3Xi等等。由于公共汽车非常快,她可以在同一天乘坐多辆公共汽车。

水桶必须在D天前完成她的旅程,但是她想要尽可能晚的开始旅程。她最近哪一天可以乘第一班公共汽车,但到D天还能完成她的旅程呢?

保证布基特有可能在第一天完成她的旅程。

输入输入的第一行给出测试用例的数量,T测试用例紧随其后。每个测试用例从包含两个整数N和D的一行开始,然后,另一行包含N个整数,第一行是Xi。

输出每个测试用例,输出一行包含用例#x: y的行,其中x是测试用例编号(从1开始),y是她可以乘坐第一辆巴士的最新一天,但到D天仍能完成她的旅程。

限时:每套测试10秒。内存限制: 1GB。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-18 08:13:54

我猜想使用int是不够的,因为在测试集2中,D最多可以达到10^12。

编辑:我验证了我的猜测。您将能够通过修复这个错误来解决这个问题。我认为在编码竞赛中使用long long是很普遍的,即每次都要注意输入/输出的约束。

票数 1
EN

Stack Overflow用户

发布于 2020-06-07 17:22:29

代码语言:javascript
复制
    #include <iostream> 
    #include <bits/stdc++.h>
    using namespace std;
    int main ()
    { 
        int t;
        long long int x,i,j,n,d;
        cin >> t;       
        for ( i = 0; i < t; i++)
        {
            cin >> n >> d;
            stack < long long int >route;
            for (j = 0; j < n; j++)
            {
                cin >> x;
                route.push (x);
            }
            while (!route.empty ())
            {
                long long int c = route.top ();
                route.pop ();
                d = d - d % c;
            }
    cout << "Case #" << i+1 << ": " << d << endl;
    }
    return 0;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61844341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档