在 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