在提交代码时,我遇到了RE(SIGSEGV)错误。 我的代码是:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T,val,v;
int min = INT_MAX;
int N,M;
cin >> T;
while(T--){
cin >> N >> M;
vector<int> vec(M+1,0);
vector<int> arr1;
for(int i=0;i<N;i++){
cin >> v;
arr1.push_back(v);
}
for(int j=0;j<N;j++){
cin >> val;
vec[arr1[j]]+=val;
}
for(int i=1;i<=M;i++){
if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
min = vec[arr1[i]];
}
}
cout << " box: "<<endl;
for(int a=0;a<vec.size();a++){
cout << vec[a] << " ";
}
cout << endl;
cout << min << endl;
vec.clear();
arr1.clear();
}
return 0;
}
问题链接:https://www.codechef.com/MARCH20B/problems/CHPINTU。 谁能告诉我为什么会这样?我该如何克服这个问题? 谢谢。
答案 0 :(得分:1)
N可能小于M,在这种情况下,这可能会导致细分错误:
for(int i=1;i<=M;i++){
if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
min = vec[arr1[i]];
}
}
您应该查看的是 vec [i] ,而不是 vec [arr1 [i]]
Nit:这仍然会给您WA(错误答案),但不会导致SIGSEGV,我可以找到的错误之一是仅在开始时初始化 min ,而不是在INT_MAX中对其进行初始化。 T
上的循环