背景

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 
本题中介绍的瑞士轮赛制,因最早使用于 1895 年在瑞士举办的国际象棋比赛而得名。

它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。

描述

2*N名编号为 1~2N的选手共进行R轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。 
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第3 名和第4名、……、第2K-1名和第 2K名、…… 、第 2N-1 名和第2N名,各进行一场比赛。每场比赛胜者得 1 分,负者得 0 分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。 
现给定每个选手的初始分数及其实力值,试计算在 R 轮比赛过后,排名第 Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

格式

输入格式

输入的第一行是三个正整数 N、R、Q,每两个数之间用一个空格隔开,表示有 2*N名选手、R 轮比赛,以及我们关心的名次 Q。 
第二行是 2*N个非负整数 s1, s2, …, s2N,每两个数之间用一个空格隔开,其中 s 表示编号为 i 的选手的初始分数。 
第三行是 2*N个正整数 w1, w2, …, w2N,每两个数之间用一个空格隔开,其中 w 表示编号为 i 的选手的实力值。

输出格式

输出只有一行,包含一个整数,即 R 轮比赛结束后,排名第 Q 的选手的编号。

样例1

样例输入1

2 4 2
7 6 6 7
10 5 20 15

样例输出1

1

限制

1s

提示

1 ≤ n ≤ 100,000
1 ≤ R ≤ 50
1 ≤ Q ≤ 2N
0 ≤ Si ≤ 10^8
1 ≤ Wi ≤ 10^8

来源

NOIP 2011 第三题

(转自https://vijos.org/p/1771)


  首先一次快排,把胜方和败方分开。对胜方的得分每人加一,此时,对于存储胜方的数组来说,这个数组中的元素是有序的,对于存储败方的数组来说,元素也是有序,快排一次的复杂度是O(nlog2n),而归并的时间复杂度可以做到O(n),故这里使用归并(不是归并排序)。就可以AC了

Code:

 /**
* codevs.cn & vijos.org
* Problem#1132 1771
* Accepted
* Time:609ms 637ms
* Memory:6636k 5260k
*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<cstdio>
using namespace std;
typedef bool boolean;
template<typename T>
inline void readInteger(T& u){
char x;
while(!isdigit((x = getchar())));
for(u = x - '';isdigit((x = getchar()));u = (u << ) + (u << ) + x - '');
ungetc(x, stdin);
}
template<typename T>
void merger(T a[], T b[], T o[], int size){
int l = ,r = ;
int t = ;
while(l < size || r < size){
if(r >= size || l < size && a[l] > b[r]){
o[t++] = a[l++];
}else{
o[t++] = b[r++];
}
}
}
typedef class Player{
public:
int score;
int lvl;
int num;
Player(const int score = , const int lvl = , const int num = ):score(score), lvl(lvl), num(num){}
boolean operator >(Player another) const{
if(this->score != another.score) return this->score > another.score;
return this->num < another.num;
}
}Player;
boolean cmpare(const Player& a, const Player& b){
return a > b;
}
int n;
int r,q;
Player *win, *lost, *list;
inline void init(){
readInteger(n);
readInteger(r);
readInteger(q);
list = new Player[(const int)( * n + )];
win = new Player[(const int)(n + )];
lost = new Player[(const int)(n + )];
for(int i = ;i < (n << ); i++){
list[i].num = i + ;
readInteger(list[i].score);
}
for(int i = ;i < (n << ); i++)
readInteger(list[i].lvl);
}
inline void alloc(){
for(int i = ; i < (n << ); i += ){
if(list[i].lvl > list[i + ].lvl){
win[(i >> )] = list[i];
lost[(i >> )] = list[i + ];
}else{
win[(i >> )] = list[i + ];
lost[(i >> )] = list[i];
}
win[(i >> )].score++;
}
}
inline void solve(){
sort(list, list + (n << ), cmpare);
for(int i = ; i <= r; i++){
alloc();
merger(win, lost, list, n);
}
cout<<list[q - ].num;
}
int main(){
init();
solve();
return ;
}

noip 瑞士轮 - 归并的更多相关文章

  1. noip 瑞士轮 ————归并排序解法

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

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

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

  3. Noip2011瑞士轮题解

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

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

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

  5. CODEVS 1132 瑞士轮

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

  6. [NOIP2011]瑞士轮

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

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

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

  8. NOIP2011普及组 瑞士轮

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

  9. luogu P1309 瑞士轮【排序】

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

随机推荐

  1. hdu-4283 You Are the One 区间dp,

    题意:n个人排队上台,每个人有一屌丝值D,他的不满意值=D*(k-1)(k为他前面的总人数). 求整个队列不满意值之和的最小值.你只有一个操作,就是把队首的人塞进小黑屋,也就是压入栈中,后面的人就被提 ...

  2. 反面教材 构造构造 json 数据

    构造构造 json 数据 说说你们在项目中遇到过的最糟糕的代码 - V2EX https://www.v2ex.com/t/214099

  3. 洛谷P2279 消防局的设立 [HNOI2003] 贪心

    正解:贪心 解题报告: 传送门! 这题贪心得挺显然的,,,?居然能有蓝,,,是蓝题太水了嘛,,,? 简单说下,这题一看到就能想到,对最低的没被覆盖到的点给它的祖父建一个消防局 没了? 哦这题实现还挺有 ...

  4. hammerjs wabapp h5 触屏手势一网打尽

    hammerjs官网    http://hammerjs.github.io/ 学习文章1 http://www.cnblogs.com/vajoy/p/4011723.html 学习文章2 htt ...

  5. HTML5 web 存储

    简介: HTML5 web 存储,一个比cookie更好的本地存储方式. 首先我们先了解一下: 什么是 HTML5 Web 存储? 使用html5可以在本地存储用户的浏览数据. 早些时候,本地存储使用 ...

  6. sass不识别中文字符的问题

    进入Koala安装目录,例如:C:\Program Files (x86)\Koala\rubygems\gems\sass-3.4.9\lib\sass 或者 C:\Ruby\lib\ruby\ge ...

  7. nodejs(五)同步异步--USING SETTIMEOUT INSTEAD OF SETINTERVAL TO FORCE SERIALIZATION

    Let’s say you want a function that does some I/O — such as parsing a log fi le — that will periodica ...

  8. vue学习七之Axios

    JQuery时代,我们使用ajax向后台提交数据请求,Vue时代,Axios提供了前端对后台数据请求的各种方式. 什么是Axios Axios是基于Promise的Http客户端,可以在浏览器和nod ...

  9. matplotlib--设置线条颜色及形状

    一.控制颜色 b--blue c--cyan(青色) g--green k--black m--magenta(紫红色) r--red w--white y--yellow 颜色有三种表示方法,可以用 ...

  10. MVC5 新建项目里不包含jquery.unobtrusive-ajax.js(MVC5异步表单的问题)解决方法

    Asp.NET MVC 5 高级编程第5版.pdf 中有解决方法: 用NUGET程序包管理器控制台安装下面这两个文件 Install-Package jQuery –version 1.10.2 In ...