关于 stable_sort 与 sort
  • 板块学术版
  • 楼主Harry27182SDream
  • 当前回复18
  • 已保存回复18
  • 发布时间2023/1/23 10:18
  • 上次更新2023/10/24 03:17:47
查看原帖
关于 stable_sort 与 sort
376997
Harry27182SDream楼主2023/1/23 10:18

在 ARC D 中,这样的代码可以通过

#include<bits/stdc++.h>
using namespace std;
int n,x,id[2005],res[2005],tot;char s[10];
bool ask(int i,int j,int k)
{
	cout<<"? "<<i<<" "<<j<<" "<<k<<endl;
	cin>>s;
	return s[0]=='N';
}
int main()
{
	cin>>n;x=1;
	for(int i=2;i<=n;i++)if(!ask(x,x,i))x=i;
	for(int i=1;i<=n;i++)id[i]=i;
	stable_sort(id+1,id+1+n,[=](int i,int j){return ask(i,x,j);});
	for(int i=1;i<=n;i++)res[id[i]]=i;
	cout<<"! ";
	for(int i=1;i<=n;i++)cout<<res[i]<<" "; 
	return 0;
}

而这样的不可以

#include<bits/stdc++.h>
using namespace std;
int n,x,id[2005],res[2005],tot;char s[10];
bool ask(int i,int j,int k)
{
	cout<<"? "<<i<<" "<<j<<" "<<k<<endl;
	cin>>s;
	return s[0]=='N';
}
bool cmp(int i,int j){return ask(i,x,j);}
int main()
{
	cin>>n;x=1;
	for(int i=2;i<=n;i++)if(!ask(x,x,i))x=i;
	for(int i=1;i<=n;i++)id[i]=i;
	sort(id+1,id+1+n,cmp);
	for(int i=1;i<=n;i++)res[id[i]]=i;
	cout<<"! ";
	for(int i=1;i<=n;i++)cout<<res[i]<<" "; 
	return 0;
}

bdfs发现这两个函数的区别在于稳定排序和不稳定排序,但是对于这个题来说,应该不存在相同元素,所以是无关紧要的,但是为什么实现出来 sort 会 WA

2023/1/23 10:18
加载中...