今天我在Codechef https://www.codechef.com/problems/CHPINTU上解决了问题,在这里我得到了运行时错误sigsegv,下面的代码是请帮助我。以下是C++代码
while(t!=0){
int n,m;
cin>>n>>m;
int f[n],p[n];
for(int i=0;i<n;i++)
cin>>f[i];
for(int i=0;i<n;i++)
cin>>p[i];
int freq[m+1];
bool avail[m+1];
memset(avail,false,sizeof(avail));
memset(freq,-1,sizeof(freq));
for(int i=0;i<n;i++){
freq[f[i]]+=p[i];
avail[f[i]]=true;
}
int min = INT_MAX;
for(int i=0;i<=m;i++){
if(freq[i]<min && avail[i]==true){
min=freq[i];
}
}
cout<<min<<"\n";
t--;
}
最佳答案
cin>>n>>m;
int f[n],p[n];
数组的长度不能为变量。
您可以使用
vector
或new
。vector<int> f(n);
//or
int *f = new int[n];
//remember to delete after new
在您的代码中发现的其他错误:
memset(freq,-1,sizeof(freq));
freq[f[i]]+=p[i];
freq [i]是类型i的总价。因此,应该将freq [i]初始化为0而不是-1。
您可以使用
freq[i]==0
来确定是否有这样的篮子。它节省了avail
占用的内存。关于c++ - 为什么在此代码中出现运行时错误SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60754837/