传送门

题目大意:

2*n个人,有初始的比赛分数和实力值。

每次比赛前总分从大到小排序,总分相同编号小的排在前面。

每次比赛是1和2比,3和4比,5和6比。

实力值大的获胜得1分。

每次比赛前排序确定比赛顺序。

题解:

模拟60

哎呀忘记最后一次排序

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define N 200007
  6. using namespace std;
  7.  
  8. int n,r,q,t;
  9.  
  10. struct P{
  11. int id,sc,h;
  12. }a[N];
  13.  
  14. bool cmp(P a,P b){
  15. if(a.sc==b.sc)return a.id<b.id;
  16. return a.sc>b.sc;
  17. }
  18.  
  19. int main(){
  20. scanf("%d%d%d",&n,&r,&q);t=n;n*=;
  21. for(int i=;i<=n;i++){
  22. scanf("%d",&a[i].sc);
  23. a[i].id=i;
  24. }
  25. for(int i=;i<=n;i++)scanf("%d",&a[i].h);
  26. for(int i=;i<=r;i++){
  27. sort(a+,a+n+,cmp);
  28. for(int i=;i<=t;i++){
  29. if(a[*i].h>a[*i-].h)a[*i].sc++;
  30. else a[*i-].sc++;
  31. }
  32. }
  33. sort(a+,a+n+,cmp);
  34. printf("%d\n",a[q].id);
  35. return ;
  36. }

60

正解:模拟+归并排序

60分做法时间复杂度是O()

sort的时间复杂度nlogn的

可以发现,在进行一轮比赛之后

胜的队伍+1,

败的队伍不变

所以胜的队伍的大小关系不变,败的队伍大小关系不变。

那么把每一轮胜的队伍和败的队伍分比放在一个数组里

像归并排序一样并起来。由于两个数组已经是有序的了,

所以排序的时间复杂度是O(n)的。

优化前O(r*nlogn+r*n),优化后O(2rn)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define N 200007
  6. using namespace std;
  7.  
  8. int n,r,q,t,win,lose;
  9.  
  10. struct P{
  11. int id,sc,h;
  12. }a[N],w[N],l[N];
  13.  
  14. bool cmp(P a,P b){
  15. if(a.sc==b.sc)return a.id<b.id;
  16. return a.sc>b.sc;
  17. }
  18.  
  19. bool Cp(int c1,int c2,int id1,int id2){
  20. if(c1>c2)return true;
  21. if(c1==c2&&id1<id2)return true;
  22. return false;
  23. }
  24.  
  25. void merge(int ll,int rr){
  26. int l1=ll,l2=ll,k=ll;
  27. while(l1<=rr&&l2<=rr){
  28. if(Cp(w[l1].sc,l[l2].sc,w[l1].id,l[l2].id))a[k++]=w[l1++];
  29. else a[k++]=l[l2++];
  30. }
  31. while(l1<=rr)a[k++]=w[l1++];
  32. while(l2<=rr)a[k++]=l[l2++];
  33. }
  34.  
  35. int main(){
  36. scanf("%d%d%d",&n,&r,&q);t=n;n*=;
  37. for(int i=;i<=n;i++){
  38. scanf("%d",&a[i].sc);
  39. a[i].id=i;
  40. }
  41. for(int i=;i<=n;i++)scanf("%d",&a[i].h);
  42. sort(a+,a+n+,cmp);
  43. for(int i=;i<=r;i++){
  44. win=;lose=;
  45. for(int j=;j<=t;j++){
  46. if(a[j*].h>a[j*-].h)w[++win]=a[j*],w[win].sc++,l[++lose]=a[j*-];
  47. else w[++win]=a[j*-],w[win].sc++,l[++lose]=a[j*];
  48. }
  49. merge(,t);
  50. }
  51. printf("%d\n",a[q].id);
  52. return ;
  53. }

AC

洛谷P1309 瑞士轮的更多相关文章

  1. 洛谷P1309 瑞士轮(归并排序)

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

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

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

  3. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  4. 洛谷 P1309 瑞士轮

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

  5. 洛谷P1309——瑞士轮(归并排序)

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

  6. 洛谷 - P1309 - 瑞士轮 - 归并排序

    https://www.luogu.org/problemnew/show/P1309 一开始写的直接快排没想到真的TLE了. 想到每次比赛每个人前移的量不会很多,但是不知从哪里开始优化. 搜索一下原 ...

  7. 洛谷 P1309 瑞士轮 题解

    每日一题 day4 打卡 Analysis 暴力+快排(其实是归并排序) 一开始天真的以为sort能过,结果光荣TLE,由于每次只更改相邻的元素,于是善于处理随机数的快排就会浪费很多时间.于是就想到归 ...

  8. 洛谷P1309 瑞士轮——题解

    题目传送 思路非常简单,只要开始时把结构体排个序,每次给赢的加分再排序,共r次,最后再输出分数第q大的就行了. (天真的我估错时间复杂度用每次用sort暴力排序结果60分...)实际上这道题估算时间复 ...

  9. P1309 瑞士轮 (吸氧了)

    P1309 瑞士轮 题解 1.这题可以模拟一下 2.sort吸氧可以过(可能是排序有点慢吧,不开会T) sort排序时注意: return 1 是满足条件,不交换 return 0是不满足,交换 代码 ...

随机推荐

  1. SpringBoot学习(2)

    三.日志 1.日志框架 springboot:底层是spring框架,spring框架默认使用JCL; springboot选用SLF4j和logback; 2.SLF4j使用 1.如何在系统中使用S ...

  2. linux共享上网设置

    1.打开内核ip转发 vi /etc/sysctl.conf  net.ipv4.ip_forward = 1 执行sysctrl -p生效 2.如果主机未启用防火墙,那么如下设置iptables [ ...

  3. SSM的Maven项目搭建过程

    POM文件 父项目管理jar包,pom <modelVersion>4.0.0</modelVersion> <groupId>cn.e3mall</grou ...

  4. p-value值的认识

    待续:https://www.zhihu.com/question/21429785/answer/147047565

  5. css3 transform matrix矩阵的使用

      Transform 执行顺序问题 — 后写先执行 matrix(a,b,c,d,e,f) 矩阵函数 •通过矩阵实现缩放 x轴缩放 a=x*a    c=x*c     e=x*e; y轴缩放 b= ...

  6. nginx默认配置

    user nobody; worker_processes 2; worker_cpu_affinity 000000001000 000000010000; worker_rlimit_nofile ...

  7. JBPM4入门——1.jbpm简要介绍

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  8. PHP工作笔记:遍历文件夹返回文件数组

    直接输入文件夹的路径,调用函数即可返回文件夹里面的文件数组,不返回文件夹 <?php function scanfiles($folder){ $folder = $folder."* ...

  9. Linux crontab使用及注意事项

    渗透测试中,经常会用到crontab来执行计划任务,从而实现后门程序的隐藏,但crontab有几个坑点还是需要记录一下,方便日后使用时及时查询 1.crontab配置格式 # Example of j ...

  10. New Concept English three(20)

    26w/m 36 In 1908 Lord Northcliffe offered a prize of £1000 to the first man who would fly across the ...