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-

 

posted @ 2020-06-06 20:40  ·Iris  阅读(207)  评论(0编辑  收藏  举报