C++ Google Kickstart 2020问题破纪录错误答案

C++ Google Kickstart 2020问题破纪录错误答案,c++,arrays,algorithm,optimization,C++,Arrays,Algorithm,Optimization,我在练习上一轮Google Kick Start 2020中提出的问题。该问题称为记录破坏器,如下所示: Isyana在星期四被告知在她当地的主题公园有多少游客 连续几天。第i天的游客人数为每天6人 如果同时满足以下两个条件,则为破纪录: 这一天的游客人数严格地说超过了这个数字 前几天的访客数量。要么是最后一天, 或者当天的游客人数严格地高于 第二天的访客人数。请注意,第一天 可能是破纪录的一天 请帮助Isyana了解破纪录天数 输入输入的第一行给出了测试用例的数量T.T 测试用例如下。每个测试

我在练习上一轮Google Kick Start 2020中提出的问题。该问题称为记录破坏器,如下所示:

Isyana在星期四被告知在她当地的主题公园有多少游客 连续几天。第i天的游客人数为每天6人 如果同时满足以下两个条件,则为破纪录: 这一天的游客人数严格地说超过了这个数字 前几天的访客数量。要么是最后一天, 或者当天的游客人数严格地高于 第二天的访客人数。请注意,第一天 可能是破纪录的一天

请帮助Isyana了解破纪录天数

输入输入的第一行给出了测试用例的数量T.T 测试用例如下。每个测试用例都从一行开始,其中包含 整数N。第二行包含N个整数。第i个整数是 六,

输出每个测试用例,输出一行包含用例#x:y, 其中x是测试用例编号(从1开始),y是编号 创纪录的日子

限制时间限制:每个测试集20秒。内存限制:1GB。1.≤ T≤ 1000≤ 不及物动词≤ 2×105

测试集1≤ N≤ 一千

测试集2 1≤ N≤ 2×105,最多10个测试用例。对于 其余个案1宗≤ N≤ 一千

样品

输入4812072006448162342931415926699 9 9 9 9

输出案例#1:2案例#2:1案例#3:3案例#4:0

在示例案例#1中,下列粗体和下划线数字 代表破纪录的天数:1 2 0 7 2 0 2 0

在示例案例2中,只有最后一天是破纪录的一天

在样本案例#3中,记录第一天、第三天和第六天 休息日

在样本案例4中,没有破纪录的一天

这就是我创建的解决方案。它在第一个测试用例中给出了一个错误的答案,但是我想不出我错过了什么具体的用例

#include<iostream>
#include<algorithm>

using namespace std;

int record_breaking(long long int arr[], long long int n)
{
    long long int ans = 0;
    long long int m = arr[0];
    for(long long int i = 0; i<n; i++)
    {
        //For first element
        if(i == 0 && arr[0] > arr[1])
        {
               ans++;
        }
        
        //For the last element
        else if(i == n - 1 && arr[i] > m)
        {
                ans++;
                //cout<<arr[i]<<" is a answer "<<endl;
               
        }
        //Normal Case
        else if(arr[i] > m && arr[i] > arr[i + 1])
        {
                ans++;
                //cout<<arr[i]<<" is a answer "<<endl;
        }
        m = max(arr[i], m);
    }
    return ans;
}

int main()
{
    int t;
    cin>>t;
    for(int test = 1; test <= t; test++)
    {
        long long int n;
        cin>>n;
        long long int arr[200000];
        //int *arr = new int [n];
        for(long long int i = 0; i<n; i++)
        {
            cin>>arr[i];
        }
        cout<<endl<<"Case #"<<test<<": "<<record_breaking(arr, n);
        //delete [] arr;
    }
    
    return 0;
}
#包括
#包括
使用名称空间std;
整数记录打破(长整数arr[],长整数n)
{
长整型ans=0;
长整型m=arr[0];
for(long-long-int i=0;i-arr[1])
{
ans++;
}
//对于最后一个元素
else如果(i==n-1&&arr[i]>m)
{
ans++;
//这会过去的

边缘大小写:

输入:

一,

一,

二,

输出:

一,

但是您的代码将0作为输出

出了什么问题:

您正在将第一个if语句添加为(i==0&&arr[0]>arr[1]),但没有多个元素…因此,首先您必须检查此条件(i==n-1&&arr[i]>m)…这意味着您必须进行正确的顺序

另外,初始化m=-1对于边缘以上的情况至关重要

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int record_breaking(vector<int> arr, int n)
{
    int ans = 0;
    int m = -1;
    for(int i = 0; i<n; i++)
    {
        
        //For the last element
        if(i == n - 1 && arr[i] > m)
        {
                ans++;
                //cout<<arr[i]<<" is a answer "<<endl;
               
        }

        //For first element
        else if(i == 0 && arr[0] > arr[1])
        {
               ans++;
        }

        //Normal Case
        else if(arr[i] > m && arr[i] > arr[i + 1])
        {
                ans++;
                //cout<<arr[i]<<" is a answer "<<endl;
        }
        m = max(arr[i], m);
    }
    return ans;
}

int main()
{
    int t;
    cin>>t;
    for(int test = 1; test <= t; test++)
    {
        int n, temp;
        cin>>n;
        vector<int> arr;
        //long long int arr[200000];
        //int *arr = new int [n];
        for(int i = 0; i<n; i++)
        {
            cin>>temp;
            arr.push_back(temp);
        }
        cout<<endl<<"Case #"<<test<<": "<<record_breaking(arr, n);
        //delete [] arr;
    }
    
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
整数记录破环(矢量arr,整数n)
{
int ans=0;
int m=-1;
for(int i=0;i m)
{
ans++;

//cout
long-long int-arr[200000];
不会在任何地方都起作用。如果您不知道大小,请使用
std::vector
。@Someprogrammerdude我尝试过,但它仍然给了我一个错误的答案。这是修改后的代码,是的,它确实起作用。但是将m初始化为arr[0]有什么问题吗?