洛谷P1309 瑞士轮【归并排序】
题目链接: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 瑞士轮【归并排序】相关推荐
- 洛谷 P1309 瑞士轮 归并
洛谷 P1309 瑞士轮 https://www.luogu.com.cn/problem/P1309 每一轮快排,超时: # include<iostream> # include< ...
- 洛谷 P1309 瑞士轮 解题报告
P1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低 ...
- 洛谷 P1309 瑞士轮
题目链接:https://www.luogu.org/problemnew/show/P1309 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特 ...
- 洛谷排序--瑞士轮(归并排序)
洛谷排序–瑞士轮(归并排序) 题目背景: 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平 ...
- 洛谷1309 瑞士轮
洛谷1309 瑞士轮 本题地址: http://www.luogu.org/problem/show?pid=1309 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘 ...
- Noip—p1309 瑞士轮
题目描述:洛谷p1309瑞士轮题目描述放在链接里,忘记题目描述的同学可以回去复习一下嗷. 思路 看了好多题解,都是硬往归并排序上靠,但是为什么是归并排序呢,看了好多篇文章都没有看懂,直到我手动的去模拟 ...
- 信息学奥赛一本通 1955:【11NOIP普及组】瑞士轮 | OpenJudge NOI 4.1 4363:瑞士轮 | 洛谷 P1309 [NOIP2011 普及组] 瑞士轮
[题目链接] ybt 1955:[11NOIP普及组]瑞士轮 OpenJudge NOI 4.1 4363:瑞士轮 洛谷 P1309 [NOIP2011 普及组] 瑞士轮 [题目考点] 1. 归并排序 ...
- 瑞士轮(洛谷-P1309)
题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...
- P1309 瑞士轮(C++)
题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...
最新文章
- python如何创建不同元素的矩阵_python – 如何在数据帧中创建矩阵元素的数...
- 2019-11-10 秩和奇异的一些概念
- 神经网络与深度学习(邱锡鹏)-学习笔记
- SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
- 剑指offer(刷题51-60)--c++,Python版本
- coreldraw x8段落_CorelDRAW X8中文版从入门到精通
- linux中波浪线是根目录吗,linux 波浪线 ~ 使用方法
- bootstrap入门
- 如何安装mysql 8.0.12_基于Windows安装MySQL 8.0.12图文教程
- python爬虫菜鸟教程-Python 应该怎么学?
- component、constituent、element、ingredient的区别
- WPF:window设置单一开启
- PHP100视频解压密码以及目录
- 音乐源码重新上传了,请童鞋们自行下载
- 极域电子教室中计算机图标对齐,极域电子教室使用手册整理,新手必备
- opencv python 人脸识别 相似度_python3.6+opencv+keras等人脸识别匹配初探
- 东海学计算机,田东海_北京理工大学计算机学院
- python docx 合并文档 图片_Python合并word文档制作电子书
- Android 动画基础知识学习(下)
- VINS-mono之IMU预积分(IMU预积分引出)