用sort会超时,显而易见。

然后想到了归并。至于为什么把运动员分成输与赢两组,我也不是很清楚,也许换种方式分组也行,但是分成输与赢两组更容易分组与合并。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 500005;
int Set() {
int a = 0;
bool minus = false;
char ch = getchar();
while (!(ch == '-' || (ch >= '0' && ch <= '9'))) ch = getchar();
if (ch == '-') {
minus = true;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
a = a * 10 + (ch - '0');
ch = getchar();
}
if (minus) a = -a;
return a;
}
struct As {
int Num;
int Score,Level;
inline bool operator < (const As a) const {
if(Score != a.Score) {
return Score > a.Score;
}
return Num < a.Num;
}
} Man[MAXN],Win[MAXN],Lose[MAXN];
inline void Merge(int Endw,int Endl) {
int Stax = 1,Stay = 1,Lgt = 0;
while(Stax <= Endw && Stay <= Endl) {
if(Win[Stax].operator <(Lose[Stay])) {
Man[++Lgt] = Win[Stax++];
} else {
Man[++Lgt] = Lose[Stay++];
}
}
while(Stax <= Endw) {
Man[++Lgt] = Win[Stax++];
}
while(Stay <= Endl) {
Man[++Lgt] = Lose[Stay++];
}
}
int main() {
int N,Q,R;
scanf("%d%d%d",&N,&R,&Q);
N *= 2;
for(int i = 1; i<=N; i++) {
Man[i].Num = i;
Man[i].Score = Set();
}
for(int i = 1; i<=N; i++) {
Man[i].Level = Set();
}
sort(Man + 1,Man + N + 1);
for(int i = 1; i<=R; i++) {
int Now = 1,Lw = 0,Ll = 0;
while(Now <= N) {
if(Man[Now].Level > Man[Now + 1].Level) {
Man[Now].Score ++;
Win[++Lw] = Man[Now];
Lose[++Ll] = Man[Now + 1];
} else {
Man[Now + 1].Score ++;
Win[++Lw] = Man[Now + 1];
Lose[++Ll] = Man[Now];
}
Now += 2;
}
Merge(Lw,Ll);
}
printf("%d\n",Man[Q].Num);
return 0;
}

【普及】NOIP2011 瑞士轮的更多相关文章

  1. [NOIP2011普及组]瑞士轮 JAVA实现

    题目描述 2*N名编号为1~2N的选手共进行R轮比赛.每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名.选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和.总分 ...

  2. NOIP2011普及组 瑞士轮

    OJ地址: https://www.luogu.org/problemnew/show/P1309 http://bailian.openjudge.cn/practice/4031/ 总时间限制:  ...

  3. [NOIP2011]瑞士轮

    noip2011普及组第3题. 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平 ...

  4. Noip2011瑞士轮题解

    题目背景 在双人对决的竞技性比赛.如乒乓球.羽毛球.国际象棋中.最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少.每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...

  5. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  6. [NOIp普及组2011]瑞士轮

    洛谷题目链接:瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较 ...

  7. 洛谷P1309 瑞士轮(归并排序)

    To 洛谷.1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平, ...

  8. P1309 瑞士轮

    题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...

  9. 洛谷 P1309 瑞士轮

    题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...

随机推荐

  1. ieHTTPHeaders使用方法

    在http://www.blunck.se/iehttpheaders.html下载软件打开IE浏览器查看-->浏览器栏-->ieHTTPHeaders可以查看httpheader tra ...

  2. July 04th 2017 Week 27th Tuesday

    Nothing is really beautiful but truth. 只有真理才是真美. Truth can be beautiful, but it also can be cruel. W ...

  3. June 24th 2017 Week 25th Saturday

    Who is able to be egotistical needs to be strong too. 有本事任性的人,也要有本事坚强. What is egotistical? Is it th ...

  4. Debian/Kali 安装原生Firefox

    出于种种原因,有很多人信仰原装纯净:就像debian下的iceweasel,有人总想换成firefox.好吧,正好最近29版发布了,我们无视掉这两者哥两好的关系,尝试在Debian/Kali 下安装F ...

  5. 关于token,session,cookie的概念和区别

    记录几篇讲的比较好的文章 https://www.cnblogs.com/moyand/p/9047978.html https://blog.csdn.net/wabiaozia/article/d ...

  6. Eclipse_java项目中导入外部jar文件

    非常多时候,在java项目中须要导入外部 .jar文件.比方:须要导入数据库连接驱动等等一些包.不熟悉eclipse的人可能会犯愁,事实上非常easy. ...过程例如以下:  在须要加入外部文件的项 ...

  7. numpy常用操作

    numpy也可以说是随处可见了. ndarray(np.array),就相当于mxnet 里的ndarray一样,连名字都一样. import numpy as np # 创建 a = np.arra ...

  8. C/C++心得-理解指针

    上一篇笔者用自己那不是怎么好理解的逻辑介绍了内存和C中的基本数据类型,现在笔者再根据自己重新所学来说说C语言中的指针. 理解指针才能真正的算C语言入门.也许是我大学期间太关注前端UE,也许是当初开始学 ...

  9. 搭建一个redis高可用系统

    一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份( ...

  10. ThreadPoolExecutor异常处理

    java.util.concurrent包中的ThreadPoolExecutor,提供了java语言的线程池,你可以提交一个返回结果的任务(submit(Callable),返回Future),或者 ...