【发布时间】:2020-04-10 05:35:03
【问题描述】:
下面,我附上我的代码,谁能告诉我为什么会出现运行时错误?
对于输入 1 5 1 2 1 3 1,正确答案是 2。此示例有效,但是当我将此算法放入检查器时,我得到“运行时错误”
#include <bits/stdc++.h>
using namespace std;
int main()
{
int z;
cin >> z;
for (int ii = 0; ii < z; ii++)
{
int k;
cin >> k;
vector <int> p(k,0);
for (int i = 0; i < k; i++)
{
int m;
cin >> m;
p[m]++;
}
sort(p.begin(),p.end());
int sm = p[0] + p.size()-1;
for (int i = 1; i < p.size(); i++)
{
int cm = p[i] + p.size()-i-1;
if(cm<sm)sm = cm;
}
cout << sm << endl;
}
}
【问题讨论】:
-
与您的问题无关,但请花一些时间阅读Why should I not #include <bits/stdc++.h>? 和Why is “using namespace std;” considered bad practice?。并且通常不要使用在线评委/竞赛网站作为学习资源,因为它们不是。上课,改为阅读books。
-
看不到任何明显的问题。你知道“检查员”在做什么吗?
-
我不知道'checker'在做什么,如果我知道那就太容易了。我必须解决这个问题,因为这是我大学的一项练习。
-
如果
p是空的,那么你会得到一个越界访问:int sm = p[0] + p.size()-1;事实上,很容易想出会炸毁这个程序的输入. -
那我应该改变什么?