题目链接:P1309 瑞士轮

程序说明:

卡了一个晚上,思路比较简单但是细节很多,有很多大坑!
每轮比赛结束后都需要对选手的成绩进行排序,这道题不能用STL的sort()或者手写快排进行排序,否则会超时(除非开o2优化)。看了题解之后才知道要用归并排序,于是手写归并结果还是超时。其实是没有掌握到归并的精髓。

这道题并不需要把归并排序的完整过程写出来(比如递归什么的…),否则和快排就一样了仍然会超时。需要额外开两个数组,每次比赛后,赢的人到x数组,输的人到y数组,这样的话仍然能保证x数组和y数组分别有序,因此只需要进行归并操作就可以了(即双指针)。

不开o2就能ac的代码如下:

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
//注意数组大小是2 * n
const int N = 200010;
int n, r, q;
struct node {int num; //序号 int score; //分数 int weight; //权值
} a[N], x[N], y[N];
bool cmp(node a, node b) {if(a.score == b.score) return a.num < b.num;return a.score > b.score;
}
//归并操作
void merge_sort() { int i = 1, j = 1, k = 1;while(i <= n && j <= n) {if(x[i].score > y[j].score || x[i].score == y[j].score && x[i].num < y[j].num)a[k++] = x[i++];else a[k++] = y[j++];}while(i <= n) a[k++] = x[i++];while(j <= n) a[k++] = y[j++];
}int main() {//freopen("D://a.txt", "r", stdin); scanf("%d%d%d", &n, &r, &q);for(int i = 1; i <= n * 2; i++) {scanf("%d", &a[i].score);a[i].num = i;}for(int i = 1; i <= n * 2; i++) {scanf("%d", &a[i].weight);}sort(a + 1, a + n * 2 + 1, cmp);for(int i = 1; i <= r; i++) {int k = 1;for(int j = 1; j <= n * 2 - 1; j += 2) { //注意j是奇数 if(a[j].weight < a[j + 1].weight) {a[j + 1].score++;x[k] = a[j + 1];y[k] = a[j];k++;}else {a[j].score++;x[k] = a[j];y[k] = a[j + 1];k++;} }     merge_sort();}printf("%d", a[q].num);//fclose(stdin);return 0;
}

洛谷P1309 瑞士轮【归并排序】相关推荐

  1. 洛谷 P1309 瑞士轮 归并

    洛谷 P1309 瑞士轮 https://www.luogu.com.cn/problem/P1309 每一轮快排,超时: # include<iostream> # include< ...

  2. 洛谷 P1309 瑞士轮 解题报告

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

  3. 洛谷 P1309 瑞士轮

    题目链接:https://www.luogu.org/problemnew/show/P1309 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特 ...

  4. 洛谷排序--瑞士轮(归并排序)

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

  5. 洛谷1309 瑞士轮

    洛谷1309 瑞士轮 本题地址: http://www.luogu.org/problem/show?pid=1309 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘 ...

  6. Noip—p1309 瑞士轮

    题目描述:洛谷p1309瑞士轮题目描述放在链接里,忘记题目描述的同学可以回去复习一下嗷. 思路 看了好多题解,都是硬往归并排序上靠,但是为什么是归并排序呢,看了好多篇文章都没有看懂,直到我手动的去模拟 ...

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

    [题目链接] ybt 1955:[11NOIP普及组]瑞士轮 OpenJudge NOI 4.1 4363:瑞士轮 洛谷 P1309 [NOIP2011 普及组] 瑞士轮 [题目考点] 1. 归并排序 ...

  8. 瑞士轮(洛谷-P1309)

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

  9. P1309 瑞士轮(C++)

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

最新文章

  1. python如何创建不同元素的矩阵_python – 如何在数据帧中创建矩阵元素的数...
  2. 2019-11-10 秩和奇异的一些概念
  3. 神经网络与深度学习(邱锡鹏)-学习笔记
  4. SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
  5. 剑指offer(刷题51-60)--c++,Python版本
  6. coreldraw x8段落_CorelDRAW X8中文版从入门到精通
  7. linux中波浪线是根目录吗,linux 波浪线 ~ 使用方法
  8. bootstrap入门
  9. 如何安装mysql 8.0.12_基于Windows安装MySQL 8.0.12图文教程
  10. python爬虫菜鸟教程-Python 应该怎么学?
  11. component、constituent、element、ingredient的区别
  12. WPF:window设置单一开启
  13. PHP100视频解压密码以及目录
  14. 音乐源码重新上传了,请童鞋们自行下载
  15. 极域电子教室中计算机图标对齐,极域电子教室使用手册整理,新手必备
  16. opencv python 人脸识别 相似度_python3.6+opencv+keras等人脸识别匹配初探
  17. 东海学计算机,田东海_北京理工大学计算机学院
  18. python docx 合并文档 图片_Python合并word文档制作电子书
  19. Android 动画基础知识学习(下)
  20. VINS-mono之IMU预积分(IMU预积分引出)

热门文章

  1. C++初学必练基础题【第二期】
  2. Eclipse安装使用
  3. DB2创建新用户及授权研究
  4. springboot毕设项目交通违章管理系统58ig4(java+VUE+Mybatis+Maven+Mysql)
  5. 关于在linux测试启动盘命令(qemu的使用)
  6. 是傻频日志呵阡啄凛仄
  7. 阿尔法元秒杀阿法狗,人工智能时代开启了吗
  8. 学Android必须懂的
  9. 协议森林05 我尽力 (IP协议详解)
  10. 利用临时二维码实现在电脑浏览器上的微信扫码登陆功能 - EasyWeChat版