P1309 瑞士轮
我一开始看着这个题
简单的以为
本题是一个模拟外加排序
所以直接一手sort
然后喜提60分
所以我仔细研究了一下
发现每个人都只和前一个人比赛
所以排序变化仅在2人之间
所以明显归并排序的复杂度要快于快速排序
所以
可以将sort改成手写的归并排序
但是……
我是个懒人
所以直接stable_sort
algorithm函数中的归并排序
见代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node{ 5 int id; 6 int s; 7 int w; 8 9 }a[200005]; 10 bool comp(node a,node b){ 11 if(a.s!=b.s) return a.s>b.s; 12 else return a.id<b.id; 13 } 14 int main() 15 { 16 int N,R,Q; 17 int ans=0; 18 cin>>N>>R>>Q; 19 for(int i=1;i<=2*N;i++) 20 cin>>a[i].s ; 21 for(int i=1;i<=2*N;i++) 22 cin>>a[i].w ; 23 for(int i=1;i<=2*N;i++) 24 a[i].id=i; 25 sort(a+1,a+1+2*N,comp); 26 while(ans!=R) 27 { 28 for(int i=1;i<=2*N;i+=2) 29 if(a[i].w>a[i+1].w) a[i].s++; 30 else a[i+1].s++; 31 ans++; 32 stable_sort(a+1,a+1+2*N,comp); 33 } 34 cout<<a[Q].id; 35 }
-end-