【题解】【洛谷P1309】【归并排序】—— [NOIP2011 普及组] 瑞士轮

【NOIP】瑞士轮 一篇题解 阅读详情

[NOIP2011 普及组] 瑞士轮

通往洛谷的传送门

题目背景

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

本题中介绍的瑞士轮赛制,因最早使用于 1895 1895 1895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。

题目描述

2 × N 2 \times N 2×N 名编号为 1 ∼ 2 N 1\sim 2N 1∼2N 的选手共进行 R R R轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。

每轮比赛的对阵安排与该轮比赛开始前的排名有关:第 1 1 1名和第 2 2 2名、第 3 3 3名和第 4 4 4名、……、第 2 K − 1 2K - 1 2K−1名和第 2 K 2K 2K名、…… 、第 2 N − 1 2N - 1 2N−1名和第 2 N 2N 2N名,各进行一场比赛。每场比赛胜者得 1 1 1分,负者得 0 0 0分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。

现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第 Q Q Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

输入格式

第一行是三个正整数 N , R , Q N,R ,Q N,R,Q,每两个数之间用一个空格隔开,表示有 2 × N 2 \times N 2×N名选手、 R R R 轮比赛,以及我们关心的名次 Q Q Q。

第二行是 2 × N 2 \times N 2×N 个非负整数 s 1 , s 2 , … , s 2 N s_1, s_2, …, s_{2N} s1​,s2​,…,s2N​,每两个数之间用一个空格隔开,其中 s i s_i si​表示编号为 i i i 的选手的初始分数。 第三行是 2 × N 2 \times N 2×N 个正整数 w 1 , w 2 , … , w 2 N w_1 , w_2 , …, w_{2N} w1​,w2​,…,w2N​,每两个数之间用一个空格隔开,其中 w i w_i wi​ 表示编号为 i i i 的选手的实力值。

输出格式

一个整数,即 R R R 轮比赛结束后,排名第 Q Q Q 的选手的编号。

输入输出样例

输入 #1

2 4 2 
7 6 6 7 
10 5 20 15

输出 #1

1

提示

【样例解释】

【数据范围】

对于 30 % 30\% 30%的数据, 1 ≤ N ≤ 100 1 ≤ N ≤ 100 1≤N≤100;

对于 50 % 50\% 50%的数据, 1 ≤ N ≤ 10 , 000 1 ≤ N ≤ 10,000 1≤N≤10,000;

对于 100 % 100\% 100%的数据, 1 ≤ N ≤ 100 , 000 , 1 ≤ R ≤ 50 , 1 ≤ Q ≤ 2 N , 0 ≤ s 1 , s 2 , … , s 2 N ≤ 1 0 8 , 1 ≤ w 1 , w 2 , … , w 2 N ≤ 1 0 8 1 ≤ N ≤ 100,000,1 ≤ R ≤ 50,1 ≤ Q ≤ 2N,0 ≤ s_1, s_2, …, s_{2N}≤10^8,1 ≤w_1, w_2 , …, w_{2N}≤ 10^8 1≤N≤100,000,1≤R≤50,1≤Q≤2N,0≤s1​,s2​,…,s2N​≤108,1≤w1​,w2​,…,w2N​≤108。

noip2011普及组第3题。

1.思路解析

    思路很简单,定义一个储存每位选手信息的player结构体。先将每位选手的初始分数排个序。然后一一比较实力值,更新分数,再排一次序。循环R轮就行了。

    这道题的重点在于排序,用sort的话……
在这里插入图片描述
    所以我们需要另辟蹊径。

    容易想到,每一次进行比赛都只有相邻元素或区间的部分发生细微的改动。不需要像sort那样,大费周章的全部重新排序。可以考虑使用归并排序。

    创建两个数组loser和winner,分别用来储存在当前比赛中失败和胜利的选手。在定义两个变量ltot和wtot,分别储存loser和winner的当前可用下标。

    这里介绍一个algorithm库中分装的函数merge,语法如下:

merge(数组名1+起始项1,数组名1+终止项1+1,数组名2+起始项2,数组名2+终止项+3,数组名3,[排序规则]);//排序规则可选

    它的作用是将两个数组归并到第三个数组里面,并排序。现在不懂没关系,可以等后期学习了归并排序的原理后再回头来看。

    虽然merge的时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn),但由于上面提到的特性,花费的时间要比sort稍微少一些。

2.AC代码

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define MAXN 200010
//用ltot储存当前"失败者"的数量,wtot储存当前"胜利者"的数量
int n,r,q,ltot,wtot;
struct player//储存每名选手的信息 
{
	int num,vaule,score;
}a[MAXN],loser[MAXN],winner[MAXN];
//loser,winner分别用来储存失败者和胜利者 
bool cmp(player a,player b)//排序规则 
{
	if(a.score==b.score)
	    return a.num<b.num;
	return a.score>b.score;
}
int main()
{
    cin>>n>>r>>q;
    n*=2;//2N名选手
    for(int i=1;i<=n;i++)
        cin>>a[i].score,a[i].num=i;
    for(int i=1;i<=n;i++)
        cin>>a[i].vaule;
	sort(a+1,a+n+1,cmp);//先排一次序 
	while(r--)//r轮比赛
	{
		wtot=ltot=0;//清零 
		for(int i=1;i<=n;i+=2)//循环每一组选手 
		{
			if(a[i].vaule<a[i+1].vaule)//如果a[i]胜出 
			{
				a[i+1].score++;
				loser[++ltot]=a[i];
				winner[++wtot]=a[i+1];
			}
			else//否则a[i+1]胜出 
			{
				a[i].score++;
				loser[++ltot]=a[i+1];
				winner[++wtot]=a[i];
			}
		}
		//归并排序 
		merge(loser+1,loser+ltot+1,winner+1,winner+wtot+1,a+1,cmp);
	}
	cout<<a[q].num;//直接输出 
	return 0;
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

NOIP2011普及组第三题瑞士轮(洛谷P1309) 本题地址: http://www.luogu.org/problem/show?pid=1309 题目背景   在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。   本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以 阅读详情

相关推荐

【题解】洛谷P1309 瑞士轮(归并排序)

看了一眼数据大小,我们可以知道用快排肯定会TLE,自己手写模拟试了试,果真只得了60分,因此我们需要改进排序算法。 这里我们可以用归并排序(时间复杂度O(N)),归并排序的思想就是对两个有序的数组进行操作,然后开另一个数组为两个数组大小之和。设两个指针p1,p2,开始初始化为1。当两个指针中的任何一个没有到最后时,就比较指针所指的数,将更大的数进入第三个数组,然后把该数所在的原数组的指针后移,反...

Rem_Inory的博客 378

信息学奥赛一本通 1955:【11NOIP普及组】瑞士轮 | OpenJudge NOI 4.1 4363:瑞士轮 | 洛谷 P1309 [NOIP2011 普及组] 瑞士轮

【题目链接】 ybt 1955:【11NOIP普及组】瑞士轮 OpenJudge 4.1 4363:瑞士轮 洛谷 P1309 [NOIP2011 普及组] 瑞士轮 【题目考点】 1. 归并排序 2. stl 排序相关函数 stl:快速排序: sort(f1,l1,cmp); f1: stl容器起始迭代器,或数组第1个元素的指针。 l1:stl容器末尾迭代器,或数组最后一个元素后一个位置的指针。 cmp:比较函数 bool cmp(a,b) 参数a与b的类型必须是容器内元素的类型或数组中元素的类型。 返回值

君义NOIP的博客 1804

深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图

读取一段音频,使用短时傅里叶变换,得到普通的时频谱图,然后绘制梅尔滤波器组,值得注意的是,librosa的梅尔滤波器组函数还带有权重归一化功能,即对一个三角形滤波器的每个权重,都除以该三角形的面积,如果不希望进行该归一化,设置参数。从公式可见,对数部分可以以自然对数为底数,也可以以10为底数,不同的底数对应不同的系数,要确定当前的系数,只需要代入(1000Hz, 1000mel)即可。其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的。

DEDSEC_Roger的博客 1万+

[NOIP2011 普及组] 瑞士轮

排序

2301_76869282的博客 471

在ros里给机械臂加上夹爪和底盘后,控制真实机械臂

使用ur3_bringup 可以连接真实机械臂 使用官方的ur3_moveit_planning_execution.launch 可以对机械臂 moveit规划。 但是只有机械臂,没有夹爪。 官方如图: 我把原来的ur3_moveit_config 复制出来,修改 然后把ur3.xacro 等模型文件复制出来修改,修改完之后,有了夹爪,有了底盘。 规划组什么的使用moveit setup assistant 配置过了。 在rviz中可以笛卡尔空间规划了。 ...

超级菜 2715

汇川PLC和PLC之间ModebusTCP通讯

然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。

panjinliang066333的博客 3万+

瑞士轮

背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于 1895 年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。 问题描述 2 n 名编

一生悬命 941

adb 通信协议分析以及实现 (三) (Adb 网络通信部分解析)

这篇文章说下adb 和adb 服务进程之间通信的socket 协议。  adb 服务进程启动之后,会监视本地的5037 端口,使用的是TCP 协议,所以adb 发送的命令其实就是往本地的5037 端口发送数据,做过网络编程的都知道,本机可以用127.0.0.1 ip地址。 有了ip 地址和端口号socket 通信就没问题 1)  命令发送方式      

inforecovvery的博客 2870

P1309 [NOIP2011 普及组] 瑞士轮————C++

选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第$ Q$ 的选手编号是多少。每场比赛胜者得$1 $分,负者得 $0 $分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。对于$50% $的数据,$1 ≤ N ≤ 10,000 $;轮比赛结束后,排名第$ Q$ 的选手的编号。对于$30% $的数据,。

Kinght_123的博客 1739

Allegro 给元器件PCB封装库添加3D模型详细步骤

从上面视图可以看到模型跟PCB 库的方向是对了,但是位置偏下,且在PCB封装库后面,我们下面需要做的就是把模型往上移、往前移。首先将元器件3D模型文件放在封装库的目录下(也可以单独新建一个模型库文件夹),注意3D文件必须是Step格式。Transparent: 选择透视的对象,可以是模型、也可以是PCB封装,或者两种都透视。在左边搜索要添加的3D模型的文件(注意是在* 星号前面输入文件名),按回车即可找到。同样的,接下来需要往Y 负方向移,即左移,一边调整一边观察视图。

sinat_15677011的博客 3679

手把手教你学PCIE(2.1.8)--pcie基本概念流量控制(Flow Control, FC)

PCIe 的流量控制(Flow Control, FC)是确保数据传输可靠性和高效性的关键技术。通过信用值管理,发送方和接收方可以动态调整数据传输速率,避免数据丢失和溢出。理解流量控制的工作原理和实现机制对于开发和调试 PCIe 系统非常重要。希望这个介绍能帮助你更好地理解和使用 PCIe 流量控制。

MHD0815的博客 1808

P1309 [NOIP2011 普及组] 瑞士轮

P1309 [NOIP2011 普及组] 瑞士轮

青少年趣味编程 768

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 250

洛谷刷题日记 P1309 [NOIP 2011 普及组] 瑞士轮

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

Wooxoococo的博客 764

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷 P1309 [NOIP 2011 普及组] 瑞士轮 题解

本题通过分析瑞士轮比赛的性质,发现每轮赛后胜者组与败者组内部天然有序,无需全量排序。优化解法采用归并思想:每轮比赛后将胜者组与败者组两个有序序列合并,时间复杂度由暴力的 $O(R \cdot N \log N)$ 降至 $O(R \cdot N)$,有效避免超时。代码实现中,初始排序后逐轮模拟比赛,利用归并合并结果,最终输出第 $Q$ 名选手编号。

Z13346722952的博客 284

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷P1309 瑞士轮

洛谷P1309 瑞士轮 题目描述 2×N 名编号为 1-2N的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。 每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第 3 名和第 4名、……、第2K - 1名和第2K名、...

weixin_30321709的博客 101

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【归并排序】【洛谷P1309】 瑞士轮

题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 题目描述 2×N名编号为...

Z_sea的博客 497

洛谷P1309 瑞士轮题解(stl merge使用&&重载运算符)

洛谷P1309 瑞士轮 题目描述 2×N 名编号为 1-2N的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。 每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第 3 名和第 4名、……、第2K - 1名和第2K名、…… 、第...

蒟蒻Artoriax 619

【题解】洛谷P1309瑞士轮[NOIP2011普及T3] 归并排序

题目链接 对赢一方和输一方分别建立数组,再归并排序 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;algorithm&amp;gt; using namespace std; #define _rep(i,a,b) for(int i=(a);i&amp;lt;=(b);i++) const int N=2e5+10; int n,R,q; int tw,tl; struct no...

翻过这座山,他们就会听到你的故事 479

【洛谷试炼场】普及练习场——排序Ex

题目 1.P1583魔法照片 排序 题目链接· 蒟蒻题解 2.P1051谁拿了最多奖学金[NOIP2005T1] 排序 题目链接 蒟蒻题解 3.P1093奖学金[NOIP2007普及] 排序 题目链接 蒟蒻题解 4.P1309瑞士轮[NOIP2011普及T3] 归并排序 题目链接 蒟蒻题解 总结 这里的排序就更上一层了。不仅融合了别的算法与技巧,排序本身也有各种花招。(...

翻过这座山,他们就会听到你的故事 295

【排序算法】归并排序

学习归并排序算法

gzkeylucky的博客 285

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

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

256

【NOIP2011普及组】瑞士轮

题目意思:给你两个数组w和s,要求每次第一名(a[1])和第二(a[2])、第三和第四、第五和第六、第i(i#include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<algorithm> #define maxn 100005 #define inf 1000000010 using namespac

cqyz_yuyuko的博客 1365

(洛谷)1309 瑞士轮+(代码)

题目背景 在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。 题目描述 2×N 名编号为 1∼2N 的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总

编程者的博客 554
上一篇: 【题解】【洛谷P1179】—— [NOIP2010 普及组] 数字统计
下一篇: 【题解】【洛谷P1308】【模拟,字符串】—— [NOIP2011 普及组] 统计单词数
蓝胖子教编程
博客等级 码龄7年 7112粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值