http://codeforces.com/problemset/gymProblem/100685/J
这个交互题实在太过JB。。。。感觉不写一下对不起自己。。。
题意:给你n(n<=1000)个元素a1-an,他们之间存在cmp,但是cmp函数是不可递推的。现在你有不超过1W次的机会询问ai与aj的cmp函数,要求出一个长度为n的序列,满足cmp(ax[i],ax[i+1])=true。恩大概就这个意思。
一开始方向想错了,想什么图论拓扑找最长链这种东西_(:зゝ∠)_居然没有注意10000大概就是nlog的复杂度。nlog,有序,这TM不就是快拍吗_(:зゝ∠)_然后问题来了,手打快排效率不稳定,很难到达刚好nlog,c++STL的sort也不稳定,归并大概可以吧(没试过),但实际上有一个STL叫stable_sort可以刚好nlog次,上这个就行了
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int a[1005]; int n; char c[10]; bool cmp(int k1,int k2){ printf("1 %d %d\n",k1,k2); cout.flush(); scanf("%s",&c); if(c[0]=='Y')return true; if(c[0]=='N')return false; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)a[i]=i; stable_sort(a+1,a+1+n,cmp); printf("0"); for(int i=1;i<=n;i++)printf(" %d",a[i]); }
2016年1月16日 12:20
我不做人啦
2016年1月16日 12:21
我不做人啦