【发布时间】:2015-06-30 19:10:57
【问题描述】:
当我在 SPOJ 中提交以下代码时,它给出了运行时错误。虽然它在我的编译器上运行良好。可能是由于测试用例什么的。我是comp编程的新手。请帮我找出错误。 问题是: http://www.spoj.com/problems/ANARC05B/en/ 输入始终按排序顺序排列。 这是我的代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
while(1)
{
int n;
scanf("%d",&n);
if(n==0)
return 0;
int element;
vector<int> v1(n);
for(int i=0;i<n;i++)
{
scanf("%d",&element);
v1[i]=element;
}
int m;
scanf("%d",&m);
vector<int> v2(m);
for(int i=0;i<m;i++)
{
scanf("%d",&element);
v2[i]=element;
}
vector<int> v3; //vector of common elements
int j=0;
if(m>n)
{
for(int i=0;i<n;i++)
{
if(binary_search(v2.begin(),v2.end(),v1[i]))
{
v3.push_back(v1[i]);
}
}
}
else if(n>=m)
{
for(int i=0;i<m;i++)
{
if(binary_search(v1.begin(),v1.end(),v2[i]))
{
v3.push_back(v2[i]);
}
}
}
vector<int> v4; //vector of sum of parts upto common elements in v1
j=0;
int k;
int sum;
for(int i=0;i<v3.size()+1;i++)
{
sum=0;
for(k=j;k<v1.size();k++)
{
sum=sum+v1[k];
if(v1[k]==v3[i])
break;
}
j=k+1;
v4.push_back(sum);
}
vector<int> v5; //vector of sum of parts upto common elements in v2
j=0;
for(int i=0;i<v3.size()+1;i++)
{
sum=0;
for(k=j;k<v2.size();k++)
{
sum=sum+v2[k];
if(v2[k]==v3[i])
break;
}
j=k+1;
v5.push_back(sum);
}
sum=0;
for(int i=0;i<v4.size();i++)
{
if(v4[i]>v5[i])
sum=sum+v4[i];
else
sum=sum+v5[i];
}
cout<<sum<<endl;
}
return 0;
}
【问题讨论】:
-
你试过调试你的代码吗?
-
scanf("%d",&n);if(n==0) return 0;对于用户想要输入零的情况,您有什么想法? -
binary_search不能很好地处理未排序的数据。还要看看使用std::set_intersection。 -
我的票数不高,但以下内容肯定适用:“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。“
-
@πάνταῥεῖ 你的票数用完了!? ಠ_ಠ
标签: c++ vector segmentation-fault