yhxcj @ 2024-11-29 15:44:21
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
bool guize(string one,string two)
{
return one+two<=two+one?true:false;
}
int main()
{
int n;
string lian[200001];
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>lian[i];
sort(lian+1,lian+1+n,guize);
for(int i=1;i<=n;i++)
cout<<lian[i];
return 0;
}
在做一道站外题时发现,以上代码在这组测试数据下会报错,但把
return one+two<=two+one?true:false;
改为
return one+two<two+one?true:false;
就不会报错,同时能AC
把
sort(lian+1,lian+1+n,guize);
改为
stable_sort(lian+1,lian+1+n,guize);
也可以
有没有谷友帮忙看一下,全机房的人被硬控了一个下午了。我们在Linux下的Codeblocks和Windows下的Dev上进行了测试,初步猜测是访问越界之类的问题。
by llamn @ 2024-11-29 15:46:57
sort中的cmp从来都是<
by dengchengyu @ 2024-11-29 15:50:51
std::sort
的比较函数要满足不能同时出现 cmp(x,y)=true
和 cmp(y,x)=true
by yhxcj @ 2024-11-29 15:57:02
@dengchengyu 是不是说无论什么数据类型都要满足