Cpp环境【NOIP2011普及组】【Vijos1787】 瑞士轮

c++代码P1309瑞士轮 立即下载
【问题描述】  

  在双人对决的竞技性比赛,如万智牌比赛(万智大法好)中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。
  本题中介绍的瑞士轮赛制,因最早使用于 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,每两个数之间用一个空格隔开,其中 si 表示编号为 i 的选手的初始分数。

 【输出格式】  

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

【输入样例】

2 4 2
7 6 6 7
10 5 20 15

【输出样例】

1

【样例解释】
(占位符)本轮对阵本轮结束后的得分本轮结束后的得分本轮结束后的得分本轮结束后的得分
选手编号\1号2号3号4号
初始\7667
第1轮①—④ ②—③7678
第2轮④—① ③—②7689
第3轮④—③ ①—②8699
第4轮③—④ ①—②96109
【数据范围】  

对于 30%的数据,1≤N≤100;
对于 50%的数据,1≤N≤10,000;
对于 100%的数据, 1≤N≤100,000, 1≤R≤50, 1≤Q≤2N, 0≤s1,s2,…,s2N≤100,000,000 ,
1≤w1,w2,…,w2N≤100,000,000 。

 【思路梳理】

  真是苦了当年的普及组,居然遇到了这样的一道分治题。对于他们来说最好的方法就是快排,每一轮以O(N)的速度统计分数,再以O(n*log(n))的速度快排,5估计连50分都很难得到。
  对于提高组来说,学习了分治算法就可以大概有个思路利用归并排序,先根据初始积分高低sort一遍,再以O(n)的时间复杂度确定每一名牌手的新的积分。对于每一场对局都肯定会有一个胜利者和失败者(牌手实力两两不同且实力高的总是能够获胜),那么不妨将所有人分为胜利者和失败者两方。
  显然胜利方、失败方的相对排名是固定的(例如a、b之前的积分分别为2和3且都取得了本轮的胜利,那么a、b的积分各自会增加1,也就是说两人的分数的差值仍然不变;对于所有胜利方的牌手,所有人的分数都增加了1,但差值仍然相同,所以互相之间的相对名次不会发生改变),也就是说这个时候一大半的顺序就是已经确定了的,比起时间复杂度不稳定的sort显然应该使用时间复杂度稳定在O(n)的归并排序,确定新的顺序。反复模拟r次就是我们要的答案。

【Cpp代码】

#include<cstdio>
#include<algorithm>
#include<iostream>
#define maxn 100005
using namespace std;
struct data
{
    int score,power,id;
}win[2*maxn],lose[2*maxn],ans[2*maxn];
int n,r,Q;

bool cmp(data a,data b)
{
    return a.score==b.score? a.id<b.id : a.score>b.score;
}

void solve()
{
    int x=0,y=0;
    for(int i=1;i<=2*n;i+=2)
    {
        if(ans[i].power>ans[i+1].power)
        {
            ans[i].score++;
            win[++x]=ans[i];
            lose[++y]=ans[i+1];
        }
        else if(ans[i].power<ans[i+1].power)
        {
            ans[i+1].score++;
            win[++x]=ans[i+1];
            lose[++y]=ans[i];
        }
    }
    //非常经典的归并排序,强烈要求读者们熟记
    int k=1,i=1,j=1;
    while(i<=x && j<=y)
    {
        if(cmp(win[i],lose[j]))     ans[k]=win[i++];
            else ans[k]=lose[j++];
        k++;
    }
    while(i<=x)     ans[k++]=win[i++];
    while(j<=y)     ans[k++]=lose[j++];
}

int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%d%d%d",&n,&r,&Q);
    for(int i=1;i<=2*n;i++)     scanf("%d",&ans[i].score),ans[i].id=i;
    for(int i=1;i<=2*n;i++)     scanf("%d",&ans[i].power);
    sort(ans+1,ans+1+2*n,cmp);  
    for(int i=1;i<=r;i++)   solve();
    cout<<ans[Q].id;
    return 0;
}


YOLOv8【第一章:基础入门篇·第1节】一文搞定,核心架构深度解析与环境配置! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀! 阅读详情

相关推荐

Flow Matching实战:5步搞定图像生成模型优化(附PyTorch代码)

本文提供了一份基于Flow Matching框架优化图像生成模型的实战指南。通过五个关键步骤,详细讲解了从环境配置、核心概念梳理到构建向量场网络、设计损失函数、编写训练循环以及选择ODE求解器进行采样的完整流程,并附有可运行的PyTorch代码,帮助开发者快速掌握这一高效的生成式建模技术。

weixin_29065959的博客 319

【普及】NOIP2011 瑞士轮

用sort会超时,显而易见。 然后想到了归并。至于为什么把运动员分成输与赢两组,我也不是很清楚,也许换种方式分组也行,但是分成输与赢两组更容易分组与合并。 #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;cmath&gt; #i...

WenOOI的博客 579

嵌入式开发实战:如何用cJSON库在STM32上实现轻量级JSON通信(附完整代码)

本文详细介绍了如何在STM32嵌入式系统中使用cJSON库实现高效的JSON通信方案。针对嵌入式环境的内存限制,提供了内存优化策略、cJSON库的深度定制方法以及完整的通信流程实现代码,帮助开发者解决JSON解析效率低下和跨平台兼容性等核心挑战。

star5的专栏 471

[NOIP2011 普及组] 瑞士轮

排序

2301_76869282的博客 471

Advanced Installer打包避坑指南:如何正确配置64位系统下的Java环境与注册表条件(以15.7版本为例)

本文详细解析了使用Advanced Installer 15.7版本在64位系统下打包Java应用时的常见问题与解决方案。重点介绍了注册表重定向机制、Java环境检测的双保险策略、环境变量设置的隐藏坑以及权限管理的进阶技巧,帮助开发者避免安装包在用户机器上无法运行的幽灵问题。

weixin_28676289的博客 322

Cadence仿真数字电路功耗

Cadence仿真数字电路功耗 数字电路的功耗采用平均电流乘电源电压获得,所以本文的关键是测量平均电流。 仿真前设置好仿真参数后,在仿真的ADE街边选择:outputs➡to be saved➡select on design 选择电源的负端电流(若选择正端,则电流为负): 选择完成后,在ADE界面讲所选节点的plot也勾选上,点击run。仿真完成后自动显示波形。在波形上选中该电流曲线,右击选择:send to➡calculator 注意上图中,商店前的波形不稳定,需要进行截取。在calculator

qq_41519780的博客 1万+

信息学奥赛一本通 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

目标检测基础

目标检测是计算机视觉的核心任务,需同时对图像中的物体进行定位与识别。传统方法存在速度慢、精度低等问题,而深度学习显著推动了该领域发展,使实时高精度检测成为可能。检测的核心是为每个物体预测边界框坐标和类别标签。为实现高效检测,引入了锚框机制,通过预设多尺度、多宽高比的候选区域,缩小预测偏移量,提升定位精度。训练时,通过计算锚框与真实边界框的交并比 (IoU) 确定正负样本,并基于此生成类别标签和坐标偏移量作为监督信号。该方法提升了检测器对多尺度目标和复杂场景的鲁棒性。

盼小辉丶的博客 2731

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

平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。总分相同的,约定编号较小的选手排名靠前。现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第$ Q$ 的选手编号是多少。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。

Pantheraonca的博客 2131

基于Gossip算法的柔性互联自治微网群分布式协调控制策略:复现代码与详细解释

摘要(149字): 本文基于Gossip算法实现了柔性互联微网群(MMG)的分布式协调控制策略仿真。研究构建了包含3个微网、10个分布式电源(DG)的MATLAB/Simulink模型,采用双层控制架构:上层通过柔性交流开关(FAS)实现微网间功率协调,下层利用Gossip算法完成DG间的边际成本一致性控制。重点开发了异步通信的Gossip算法核心函数,实现了分布式电源的自主边际成本估计与功率分配。仿真验证了系统在负荷变化和DG故障等工况下的协调控制能力,结果表明该策略能有效维持微网群的经济运行与功率平衡。

huanghm88的专栏 281

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的危险物品检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

随着公共安全需求的日益增长,危险物品检测技术在社会安防、交通安检等领域发挥着重要作用。本文介绍了一个基于YOLO系列深度学习框架的危险物品检测系统,集成了YOLOv8、YOLOv7、YOLOv6和YOLOv5四种先进的物体检测算法。系统采用PySide6开发了用户友好的图形界面,提供了完整的训练代码、预训练模型和数据集构建方案。实验结果表明,该系统在危险物品检测任务上实现了高精度和高实时性,为实际应用提供了可靠的技术支持。

YOLO 156

NOIP 2011 瑞士轮

归并排序

Orion_Rigel 460

【即插即用模块】注意力篇 | ECCV 2024 | DPB:高低频动态分离+双提示融合,PSNR直冲40+!

本文提出了一种基于频率提示的图像恢复方法FPro,通过动态滤波器分离输入特征的高低频分量,并采用双提示块(DPB)进行频域专属提示生成与调制。DPB包含低频提示调制器(LPM)和高频提示调制器(HPM),分别处理不同频段信号,通过生成提示组件并融合解码器特征来优化恢复效果。实验表明,该方法在U型结构中表现优异,尤其适用于分割、底层视觉和多模态任务。模块通过动态无监督频率分离、频域专属提示生成和适配性融合机制,有效解决了传统方法对频域信息关注不足的问题,显著提升了图像恢复质量。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 147

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

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

编程者的博客 554

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F407中文手册

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

[NOIP 2011普及组 No.3] 瑞士轮

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

weixin_30659829的博客 168

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

P1309 瑞士轮 AC于2018.11.4

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

流年成沙的成长史 466

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

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

【NOIP2011普及组】瑞士轮

http://hazeoj.nsfzsr.cn/problem/96 这题很有意思,每轮快排会超时。 通过观察后发现,每轮所有赢的人的分数必然递减,同理所有输的人的分数也成递减序。 所以用小学生合并排序可以将输赢两方的当前分数在O(n+m)的时间内排成递减序。 小提示:小学生合并排序可以用STL中的merge直接完成。 AC代码: #include #incl

fy_23forever的博客 979

瑞士轮

#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;cmath&gt; using namespace std; struct aa{ int id,s,scar; }a[200020]; int n,r,q; bool c...

少女の友的博客 826

2011普及组T3 瑞士轮

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

350

1309 瑞士轮

1309 瑞士轮 2011年普及组的题目,国庆七天文章破300,这几天狂练练题目,然后剩下的几天只需要将所有做过的题再看一遍 貌似这个题是一个排序的题目,练习排序是一个好题 首先,这个题,和去年的那个直播获奖挺像的 每组比赛的胜者:赛前,总分是按降序排的;获胜后都得1分,仍是降序; 每组比赛的负者:赛前,总分是按降序排的;不得分,仍是降序。 先按初始分数排序,然后按分数高低两人一组比赛; 胜者入队A,负者入队B。这样A、B自身仍是有序的; 只需进行合并操作即可,合并操作的复杂度是O(n),而如果用快排其复杂

CCCCDEV_CCCC的博客 2571

c++瑞士轮

每轮比赛的对阵安排与该轮比赛开始前的排名有关:第 1 名和第 2 名、第 3 名和第 4 名、……, w_2N,每两个数之间用一个空格隔开,其中 w_i 表示编号为 i 的选手的实力值。输入的第一行是三个正整数 N、R、Q,每两个数之间用一个空格隔开,表示有 2*N 名选手、R 轮比赛,以及我们关心的名次 Q。对于 100%的数据,1 ≤ N ≤ 100,000,1 ≤ R≤ 50,1 ≤ Q ≤ 2N,输出只有一行,包含一个整数,即 R 轮比赛结束后,排名第 Q 的选手的编号。

浪子回头 598

P1309 [NOIP2011 普及组] 瑞士轮 归并算法

蓝桥杯算法新手易踩的坑

langchaozhidian_的博客 2358

NOIP2011 瑞士轮

这道题我们输入后,先排一遍序,然后每个进行对比,其中要注意排序的规则,如下: bool cmp(int x,int y){ if(grade[x]==grade[y]) return x&lt;y; return grade[x]&gt;grade[y]; } 那这道题有这么简单的吗?当然没有,sort函数无论是否是正确顺序都要进行操作,浪费了大量时间,所以做出来就...

布拉克王国 483

NOIP2011普及组第3题 瑞士轮

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

一个和代码打交道の小孩 1418

NOIP2011普及组 瑞士轮

看到题解区之后明白了自己居然脑补出伪的归并排序了 (我才知道如何在Markdown中打空行了……) 洛谷-题目链接-瑞士轮 不得不说其实这题很好想或者说是灵光一现。但是在写代码的时候不知道脑子是不是抽抽了一直写挂……于是乎诞生了一系列花式WA声一片。 看到这一道题很容易想到暴力算法(这里不提供代码只提供做法),即暴力模拟,循环R次,N一遍去加分数,然后排序。其实这种做法在洛谷可以拿到70...

anxie6422的博客 567
上一篇: Cpp环境【NOIP2008普及组】【Vijos1769】 排座椅
下一篇: Cpp环境【POJ3622】【Vijos2990】【Usaco2007】挑剔的美食家
cqyz_Lebmond
博客等级 码龄10年 18粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值