看到题解区之后明白了自己居然脑补出伪的归并排序

(我才知道如何在Markdown中打空行了……)

洛谷-题目链接-瑞士轮

不得不说其实这题很好想或者说是灵光一现。但是在写代码的时候不知道脑子是不是抽抽了一直写挂……于是乎诞生了一系列花式WA声一片。

看到这一道题很容易想到暴力算法(这里不提供代码只提供做法),即暴力模拟,循环R次,N一遍去加分数,然后排序。其实这种做法在洛谷可以拿到70分……比我下面的做法写挂的情况下还多呢……而且写的贼快。时间复杂为O(R·(NlogN+N)),因为是普及组嘛,这种做法分数还蛮高的。

简洁地概括一下这道题的题意,2N个人分为N组进行比赛,实力强的+1分,对阵情况由每轮开始前的分数排名决定,且排名方式为从上到下,分数相同就取编号靠前的。

由此可知,对于此排名,每轮过后,有一半人将+1,另一半就比较厉害了啥都不变。因为这本身是个有序数组,我们可以分成两组:+1的这一组,不变的为一组。对于任意一组,它一定是有序的。因为对于一个有序数组,一些+1,+1的这些数字的相对大小关系不会发生变化,不变的那组也是一样。

那我们就可以开两个队列,一个存+1,一个存不变的,遍历所有对阵组,胜者分数+1放入+1数组,否则放入不变数组。然后就非常厉害了,我们需要合并两个数组,使其产生新的排名。那我们要做的只是不断比较两个队头,优的那个放入排名中。

那接下依旧存在一个问题。题目给的数据本身不是有序的啊?——那就先排一下吧!

可是快速排序不是一个稳定(排序前后大小一样的数据相对位置不变)的排序啊,题目要求分数一致的按编号排序啊……那我们就需要改改了。可以参考一道题洛谷-题目链接-魔法照片。

    //que保存的是排名(编号),point是分数inline void qs(int l,int r){int i=l,j=r;int num=que[(l+r)>>1];int s=point[num];while(true){while((point[que[i]]>s)||(point[que[i]]==s&&que[i]<num))i++;while((point[que[j]]<s)||(point[que[j]]==s&&que[j]>num))j--;if(i<=j){int t;t=que[i];que[i]=que[j];que[j]=t;i++;j--;}if(i>j)break;}if(i<r)qs(i,r);if(l<j)qs(l,j);}

大概就是这样吧。手打函数一直都是我的作风,其实可以简写为:

    #include<algorithm>bool cmp(int x,int y){if(s[x]!=s[y]) return s[x]>s[y];return x<y;}

......

sort(que+1,que+1+2\*n,cmp);

然后就没有然后了。。。

    #include <cstdio>using namespace std;const int size1=200005,size2=100005;int que[size1],lv[size1],point[size1];int A[size2],B[size2];int G,Q,R;inline void qs(int l,int r){...}int a,b;inline int better(){if(a==G+1)return(B[b++]);else if(b==G+1)return(A[a++]);else if(point[A[a]]>point[B[b]])return A[a++];else if(point[A[a]]<point[B[b]])return B[b++];else if(point[A[a]]==point[B[b]]){if(A[a]<B[b])return A[a++];else return B[b++];}}int main(){scanf("%d%d%d",&G,&R,&Q);int N=G<<1;for(int i=1;i<=N;i++)scanf("%d",&point[i]);for(int i=1;i<=N;i++){scanf("%d",&lv[i]);que[i]=i;}qs(1,N);for(int k=1;k<=R;k++){for(int i=1;i<=N;i++)printf("%d ",que[i]);puts("\n");int step=1;for(int i=1;i<N;i+=2){int u=que[i];int v=que[i+1];if(lv[u]>lv[v]){A[step]=u;B[step]=v;point[u]++;}else{A[step]=v;B[step]=u;point[v]++;}step++;}a=1,b=1;for(int i=1;i<=N;i++)que[i]=better();}printf("%d",que[Q]);return 0;}
啊时间晚了不想过多解释。。。

转载于:https://www.cnblogs.com/Neworld2002/p/8470878.html

NOIP2011普及组 瑞士轮相关推荐

  1. P1309 [NOIP2011 普及组] 瑞士轮-快排+归并排序

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

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

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

  3. [NOIP2011 普及组] 瑞士轮

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

  4. P1309 [NOIP2011 普及组] 瑞士轮

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

  5. P1307 [NOIP2011 普及组] 数字反转(python3实现)

    https://www.luogu.com.cn/problem/P1307 """P1307 [NOIP2011 普及组] 数字反转 https://www.luogu ...

  6. 信息学奥赛一本通 1956:【11NOIP普及组】表达式的值 | 洛谷 P1310 [NOIP2011 普及组] 表达式的值

    [题目链接] ybt 1956:[11NOIP普及组]表达式的值 洛谷 P1310 [NOIP2011 普及组] 表达式的值 [题目考点] 表达式树 由带括号的中缀表达式构建表达式树 [解题思路] 思 ...

  7. 信息学奥赛一本通 1089:数字反转 | 1953:【11NOIP普及组】数字反转 | OpenJudge NOI 1.5 29 | 洛谷 P1307 [NOIP2011 普及组] 数字反转

    [题目链接] ybt 1089:数字反转 ybt 1953:[11NOIP普及组]数字反转 OpenJudge NOI 1.5 29:数字反转 洛谷 P1307 [NOIP2011 普及组] 数字反转 ...

  8. 洛谷——P1307 [NOIP2011 普及组] 数字反转

    P1307 [NOIP2011 普及组] 数字反转 题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应 ...

  9. 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数

    [题目链接] ybt 1400:统计单词数 ybt 1954:[11NOIP普及组]统计单词数 OpenJudge NOI 1.12 05:统计单词数 洛谷 P1308 [NOIP2011 普及组] ...

最新文章

  1. 2022-2028年中国电梯行业市场调查及前瞻分析报告
  2. error LNK2001: 无法解析的外部符号 public: static int Pe...
  3. 专业程序员成长之路之基础基础!
  4. 计算机社团竞选优势6,社团社长竞选稿六篇
  5. C语言课后习题(53)
  6. 【LeetCode】剑指 Offer 45. 把数组排成最小的数
  7. Intel 加速分布式计算系统的三个神器
  8. paip.提升用户体验---c++ gcc 命令语法着色搭配方案
  9. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC2
  10. 源码搜索引擎,让你找到更适合你的源码
  11. CT值、线性衰减系数与质量衰减系数的关系
  12. 一些实用的电脑小技巧(1)
  13. 【hadoop生态之Hbase】HBASE简介【笔记+代码】
  14. MySQL 常用时间记录
  15. 【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法
  16. 最小二乘法解的矩阵形式推导
  17. JAVA用一维数组生成福彩双色球中奖号码
  18. 大众点评搜索相关性技术探索与实践
  19. 2D转3D技术的优势
  20. GNSS-RTK/INS紧组合算法

热门文章

  1. python机器人制作方法_Python抖音机器人制作!让你有看不完的小姐姐
  2. linux qt目录查看器,6个轻量级的Qt图像查看器为Linux | MOS86
  3. 用一下啦(火史莱姆小心心)
  4. 精读《维护好一个复杂项目》
  5. 探究如何计算哈希表查找成功、失败时的平均查找长度(附实例)
  6. Java输出hellow world
  7. Linux shell中的-d,-f,-e,-n的作用
  8. 【复现 | 论文】Seg4Reg Networks for Automated Spinal Curvature Estimation
  9. c语言程序设计胡成松,C语言程序设计教学课件 作者 胡成松 黄玉兰 李文红 课后习题解答 习题答案 4选择结构程序设计 .docx...
  10. 一文揭秘Filecoin国内布局