瑞士轮 (优化)

2023-12-26 16:32
文章标签 优化 瑞士

本文主要是介绍瑞士轮 (优化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem F: 瑞士轮

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 60  Solved: 19
[Submit][Status][Web Board]

Description

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。 
本题中介绍的瑞士轮赛制,因最早使用于 1895 年在瑞士举办的国际象棋比赛而得名。
它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。 
 
2*N名编号为 1~2N的选手共进行R轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。 
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1 名和第2 名、第3 名和第4名、……、第2K-1名和第 2K名、……  、第 2N-1 名和第2N名,各进行一场比赛。每场比赛胜者得 1 分,负者得 0 分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。 
现给定每个选手的初始分数及其实力值,试计算在 R 轮比赛过后,排名第 Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

Input


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

Output

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

Sample Input

2 4 2 7 6 6 7 10 5 20 15

Sample Output

1

HINT

 

输入输出样例说明:

 

本轮对阵

 

本轮结束后的得分

 

选手编号

 

/

 

 

 

 

 

初始

 

/

 

7

 

6

 

6

 

7

 

第1轮

 

①—④    ②—③

 

7

 

6

 

7

 

8

 

第2轮

 

④—①    ③—②

 

7

 

6

 

8

 

9

 

第3轮

 

④—③    ①—②

 

8

 

6

 

9

 

9

 

第4轮

 

③—④    ①—②

 

9

 

6

 

10

 

9

 

数据范围: 

对于 30%的数据,1<=N<=100; 

对于 50%的数据,1<=N<=10,000; 

对于 100%的数据,1<=N<=100,000,1<=R<=50,1<=Q<=2N,0<= s1, s2, …, s2N<=108,1<=w1, w2, …, w2N<=108。

NOIP2011 普及组 swiss

 

 

 

题目意思很简单,经过r次比赛后输出排名第k位的编号。

裸sort去暴力超时,想到一点:

赢的人,每人加一分后,在赢的组里面依旧是处于降序(有序)

输的人,在输的组里面依旧是处于降序(有序)

赢的人加输的人就等于总人数啦,也就是,

把两个有序的数组合并成一个有序的数组,时间复杂度O(N) 比sort 少了log(N),AC:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<ctime>
#include<cctype>
#include<stack>
using namespace std;
#define mod 19999997
struct Node
{int sco;int power;int index;
} win[100005],lose[100005],a[200005];bool cmp(Node a,Node b)
{if(a.sco!=b.sco) return a.sco>b.sco;return a.index<b.index;
}
int n,r,q;
int merges()
{int w=0;int l=0;int i;for( i=1; w!=n&&l!=n; i++)if(win[w].sco>lose[l].sco)a[i]=win[w++];else if(win[w].sco==lose[l].sco){if(win[w].index<lose[l].index){a[i]=win[w++];}elsea[i]=lose[l++];}elsea[i]=lose[l++];if(l!=n) while(l<n) a[i++]=lose[l++];if(w!=n) while(w<n) a[i++]=win[w++];
}int main()
{scanf("%d%d%d",&n,&r,&q);for(int i=1; i<=2*n; i++){scanf("%d",&a[i].sco);a[i].index=i;}for(int i=1; i<=2*n; i++)scanf("%d",&a[i].power);sort(a+1,a+1+2*n,cmp);for(int i=0; i<r; i++){//for(int i=1;i<=2*n;i++)// cout<<a[i].sco<<" "<<a[i].power<<" "<<a[i].index<<endl;int x=0;int y=0;for(int j=1; j<2*n; j+=2)if(a[j].power>a[j+1].power)win[x]=a[j],lose[y++]=a[j+1],win[x++].sco++;elsewin[x]=a[j+1],lose[y++]=a[j],win[x++].sco++;merges();}cout<<a[q].index;return 0;
}

 

这篇关于瑞士轮 (优化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540122

相关文章

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

构建高性能WEB之HTTP首部优化

0x00 前言 在讨论浏览器优化之前,首先我们先分析下从客户端发起一个HTTP请求到用户接收到响应之间,都发生了什么?知己知彼,才能百战不殆。这也是作为一个WEB开发者,为什么一定要深入学习TCP/IP等网络知识。 0x01 到底发生什么了? 当用户发起一个HTTP请求时,首先客户端将与服务端之间建立TCP连接,成功建立连接后,服务端将对请求进行处理,并对客户端做出响应,响应内容一般包括响应

DAY16:什么是慢查询,导致的原因,优化方法 | undo log、redo log、binlog的用处 | MySQL有哪些锁

目录 什么是慢查询,导致的原因,优化方法 undo log、redo log、binlog的用处  MySQL有哪些锁   什么是慢查询,导致的原因,优化方法 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 导致的原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致

MySQL 数据优化

MySQL 数据优化的指南 MySQL 数据库优化是一个复杂且重要的过程,它直接影响到系统的性能、可靠性和可扩展性。在处理大量数据或高并发请求时,数据库的优化尤为关键。通过合理的数据库设计、索引使用、查询优化和硬件调优,可以大幅提高 MySQL 的运行效率。本文将从几个主要方面详细介绍 MySQL 的优化技巧,帮助你在实际应用中提升数据库性能。 一、数据库设计优化 1. 数据库的规范化与反规