【发布时间】:2016-03-30 12:34:27
【问题描述】:
我尝试在 spoj 上解决这个问题。 http://www.spoj.com/problems/BUSYMAN/
虽然我能够解决它,但我遇到了一个非常奇怪的错误。我试图了解它的原因,但失败了。我有两个代码。
/////////////////////////////////////// ////
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class activity
{
public:
int start,end;
};
bool comp(activity p, activity q)
{
if(p.end<q.end)return true;
if(p.end==q.end&&p.start<=q.start)return true;
return false;
}
int main()
{
int t;
cin>>t;
vector<activity> v;
for(int i=0;i<t;i++)
{
int n;
cin>>n;
v.resize(n);
for(int j=0;j<n;j++)cin>>v[j].start>>v[j].end;
sort(v.begin(),v.end(),comp);
int ans=0,currend=0;
for(int j=0;j<n;j++)
{
if(v[j].start>=currend){ans++;currend=v[j].end;
}
}
cout<<ans<<endl;
}
}
/////////////////////////////////////// p>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class activity
{
public:
int start,end;
};
bool comp(activity p, activity q)
{
if(p.end<q.end)return true;
if(p.end==q.end&&p.start>=q.start)return true;
return false;
}
int main()
{
int t;
cin>>t;
int n;
vector<activity> v;
for(int i=0;i<t;i++)
{
cin>>n;
v.resize(n);
for(int j=0;j<n;j++)
cin>>v[j].start>>v[j].end;
sort(v.begin(),v.end(),comp);
int ans=0,currend=0;
for(int j=0;j<n;j++)
{
if(v[j].start>=currend)
{
ans++;currend=v[j].end;
}
}
cout<<ans<<endl;
}
}
//////////////////////////
我的问题是第一个在 spoj 上给出了分段错误,而第二个没有。两者之间的唯一区别是比较功能。我只是碰巧以两种相似的方式定义了比较函数的第二条语句。但它在第一种情况下给了我分段错误,但在第二种情况下没有。
在上面的两个图像中,有两个代码具有各自的提交 ID,在第三个中,它显示了一个段错误,而另一个则没有。您也可以使用我的 spoj 个人资料上的提交 ID 进行验证。
【问题讨论】: