C++ Google Kickstart 2020问题破纪录错误答案
我在练习上一轮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中,没有破纪录的一天 这就是我创建的解决方案。它在第一个测试用例中给出了一个错误的答案,但是我想不出我错过了什么具体的用例C++ Google Kickstart 2020问题破纪录错误答案,c++,arrays,algorithm,optimization,C++,Arrays,Algorithm,Optimization,我在练习上一轮Google Kick Start 2020中提出的问题。该问题称为记录破坏器,如下所示: Isyana在星期四被告知在她当地的主题公园有多少游客 连续几天。第i天的游客人数为每天6人 如果同时满足以下两个条件,则为破纪录: 这一天的游客人数严格地说超过了这个数字 前几天的访客数量。要么是最后一天, 或者当天的游客人数严格地高于 第二天的访客人数。请注意,第一天 可能是破纪录的一天 请帮助Isyana了解破纪录天数 输入输入的第一行给出了测试用例的数量T.T 测试用例如下。每个测试
#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++;
//coutlong-long int-arr[200000];
不会在任何地方都起作用。如果您不知道大小,请使用std::vector
。@Someprogrammerdude我尝试过,但它仍然给了我一个错误的答案。这是修改后的代码,是的,它确实起作用。但是将m初始化为arr[0]有什么问题吗?