【问题标题】:Google kickstart Record breaker wrong answerGoogle kickstart 破纪录者错误答案
【发布时间】:2023-03-25 17:47:01
【问题描述】:

我试图从 google kickstart Round D 2020 中解决 record breaker problem 我在 C++ 中提交了以下代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int testcase;
    cin>>testcase;
    int t=1;
    while(t<=testcase){
        int n;
        cin>>n;
        int arr[n+1];
        for(int i=0;i<n;i++)
            cin>>arr[i];
        arr[n]=0;
        int prev=0,ans=0;
        for(int i=0;i<n;i++){
            if(arr[i]>prev && arr[i]>arr[i+1]){
                ans++;
            }
            prev=max(prev,arr[i]);
        }
        cout<<"Case #"<<t<<": "<<ans<<endl;
        t++;
    }
    return 0;
}

它通过了示例测试集,我还尝试在来自不同文章和网站的某些边缘案例上进行检查,但由于它没有通过测试集 1,因此仍然无法找到错误。 请帮忙。

【问题讨论】:

  • int arr[n+1];: 可变长度数组不是 C++ 标准。尝试使用向量,看看是否能解决问题
  • 我的意思是它通过了示例测试用例但没有通过测试集1
  • 另外,您应该编辑您的问题以使其独立。它缺少重现错误所需的输入、该输入的预期输出和实际输出。如果有问题的案例是硬编码的,这样就不需要输入了,那就更好了。

标签: c++ arrays algorithm optimization


【解决方案1】:

我终于找到了自己问题的答案。好吧,我不知道就我自己的问题发布答案是否正确,但我仍然认为它可能会帮助可能面临类似问题的人。 逻辑有一点问题,我只是错过了我努力寻找的一个边缘案例。 Kickstart 认为如果天数为 1,那么无论当天有多少访客,那一天都是破纪录的一天。这意味着以下输入应输出 1:

1
1
0

因此我进行了必要的更改(在代码中表示)如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int testcase;
    cin>>testcase;
    int t=1;
    while(t<=testcase){
        int n;
        cin>>n;
        int arr[n+1];
        arr[n]=-1;                  //last element is assigned -1 instead of 0
        for(int i=0;i<n;i++)
            cin>>arr[i];
        int prev=-1,ans=0;          //prev is assined -1 instead of 0
        for(int i=0;i<n;i++){
            if(arr[i]>prev && arr[i]>arr[i+1]){
                ans++;
            }
            prev=max(prev,arr[i]);
        }
        cout<<"Case #"<<t<<": "<<ans<<endl;
        t++;
    }
    return 0;
}

它通过了所有测试用例。 当我找到解决方案时,我感到非常高兴,你不会相信,我花了 43 次尝试 (here is the proof) 才找到这个边缘案例。 好吧,我是竞争编码的初学者,所以我只想给所有初学者留言,永不放弃!!! 通过努力,我发现了自己的错误。 所以,继续努力吧。

【讨论】:

  • “嗯,我不知道就我自己的问题发布答案是否正确” -- Answering your own question is allowed.
  • “因为没有人可以帮助我” -- 更好的措辞是“会”而不是“可以”。至少有一个人可以帮助你,但你忽略了让你的问题独立的请求。读者不必通过链接来了解您的代码应该做什么。如果问题本身没有这些信息,我相信适当的回应是结束问题,而不是回答它。 (我知道你不知道失败的具体情况,但某种预期的输入/输出也应该在问题中。)无论如何,恭喜你找到了边缘情况。
猜你喜欢
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多