0025:2011年NOIp普及组真题——瑞士轮题解
题目链接:https://www.luogu.com.cn/problem/P1309
如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分;
这是因为每次比完赛会产生两个有序数列(输/赢),只需要把这两个有序数列合并成一个有序数列,而sort则是排了所有的数,显然浪费了时间
一提到有序数列,会想到归并排序——由于两个有序数列是现成的,所以只要并就行了,省了不少时间,可以AC
上代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,r,q;
4 int a[200100],s[200100],w[200100],win[200100],lose[200100];//a——序号,s——分数,w——战力
5 bool cmp(int a,int b){//排序的时候判断大小(用标号)
6 if(s[a]==s[b]){
7 return a<b;
8 }
9 return s[a]>s[b];
10 }
11 void Q(){//归并排序——并
12 int i,j;
13 i=j=1,a[0]=0;
14 while(i<=win[0]&&j<=lose[0]){//输赢两个有序序列,所以直接并
15 if(cmp(win[i],lose[j]))
16 a[++a[0]]=win[i++];//回到a(序号)数组
17 else
18 a[++a[0]]=lose[j++];
19 }
20 while(i<=win[0])a[++a[0]]=win[i++];
21 while(j<=lose[0])a[++a[0]]=lose[j++];//处理掉剩余的数
22 }
23 int main(){
24 cin>>n>>r>>q;
25 n*=2;
26 for(int i=1;i<=n;i++){
27 cin>>s[i];
28 }
29 for(int i=1;i<=n;i++){
30 cin>>w[i];
31 a[i]=i;
32 }
33 sort(a+1,a+n+1,cmp);//先快排一次
34 for(int i=1;i<=r;i++){
35 win[0]=lose[0]=0;//0的正好没用,用来计数
36 for(int j=1;j<=n;j+=2){
37 if(w[a[j]]>w[a[j+1]]){//判断哪方胜利
38 s[a[j]]++;
39 win[++win[0]]=a[j];
40 lose[++lose[0]]=a[j+1];//加入
41 }
42 else{
43 s[a[j+1]]++;
44 win[++win[0]]=a[j+1];
45 lose[++lose[0]]=a[j];
46 }
47 }
48 Q();
49 }
50 cout<<a[q];//结束
51 return 0;
52 }
0025:2011年NOIp普及组真题——瑞士轮题解的更多相关文章
- NOIP2012 普及组真题 4.13校模拟
考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...
- 纪中10日T1 2300. 【noip普及组第一题】模板题
2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms 空间限制: 262144 K ...
- 2011年NOIP普及组复赛题解
题目涉及算法: 数字反转:模拟: 统计单词数:模拟: 瑞士轮:模拟/排序: 表达式的值:后缀表达式/DP. 数字反转 题目链接:https://www.luogu.org/problem/P1307 ...
- 排座椅 2008 NOIP 普及组 第二题
题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...
- $NOIp$普及组做题记录
\([NOIp2014]\) 螺旋矩阵 \(Sol\) 直接模拟,一次走一整行或者一整列.复杂度\(O(n)\). \(Code\) #include<bits/stdc++.h> #de ...
- [NOIP普及组2011]装箱问题
目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 样例 输入 输出 前缀知识 题解 题目名称:装箱问题 来源:2011年NOIP普及组 链接 博客链接 CSDN 洛谷博客 题目链接 ...
- 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题
洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...
- 2016.9.3初中部上午NOIP普及组比赛总结
2016.9.3初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1339 这次真爽,拿了个第四!(我还被班主任叫过去1小时呢!) 进 ...
- 2321. 【NOIP普及组T1】方程
2321. [NOIP普及组T1]方程 时间限制: 1000 ms 空间限制: 262144 KB 题目描述
随机推荐
- 倒计时2日!基于 Apache DolphinScheduler&TiDB 的交叉开发实践,从编写到调度让你大幅提升效率
当大数据挖掘成为企业赖以生存.发展乃至转型的生命,如何找到一款好软件帮助企业满足需求,成为了许多大数据工程师困扰的问题.但在当下高速发展的大数据领域,光是一款好软件似乎都不足以满足所有场景业务需求,许 ...
- (WebFlux)002、如何打印日志与链路ID
一.背景 最近在持续改造项目,想通过日志查看用户所有的接口链路日志.在原来基于SpirngMVC的时候,那是比较好处理的,通过ThreadLocal,放入TraceId,就可以把一个TraceId传到 ...
- Linux 03 用户管理
参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 Linux ...
- HDU4372 Count the Buildings (+题解:斯特林数)
题面 (笔者翻译) There are N buildings standing in a straight line in the City, numbered from 1 to N. The h ...
- 「题解报告」SP16185 Mining your own business
题解 SP16185 Mining your own business 原题传送门 题意 给你一个无向图,求至少安装多少个太平井,才能使不管那个点封闭,其他点都可以与有太平井的点联通. 题解 其他题解 ...
- iOS 苹果集成登录及苹果图标的制作要求
前言 如果要上架的应用集成了三方登录,那么在审核时,苹果会强制要求应用也要集成苹果登录.如果应用没有集成一般情况下都会被审核团队给打回来. 苹果集成登录 首先,你需要在开发者中心,找到你的应用,勾选上 ...
- Linux面试题 系统启动流程
BIOS:基本输入输出系统,帮助我们初始化硬件 硬盘分区有两类:MBR和GPT ; MBR单块硬盘不能大于2T,主分区的数量不能超过4个:MBR方案存储在第一个扇区的前446个字节(共512字节,后面 ...
- KingbaseFlySync 专用机版本升级
关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java 专线机版本升级 1.备份kfs配置文件和rename问题,kufl目录 fsrepctl ...
- logstash客户端传送symantec日志到elasticsearch
一.安装相应版本的logstash wget https://artifacts.elastic.co/downloads/beats/logstash/logstash-7.5.2-x86_64.r ...
- Jsoup爬取网上数据完成翻译
Jsoup使用 首先进入Jsoup下载jar包 然后打开IDEA创建一个普通的java项目 在项目结构里创建 lib 目录 但是我们这样并不能直接进行使用 需要添加路径 右键点击 然后添加路径 选择模 ...