zoukankan      html  css  js  c++  java
  • 【解题报告】瑞士轮(NOIP2011普及组T3)

      【题外话:这道题吧……说实话我不太喜欢……因为卡快排。】

      题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时候也要注意。)

      我是用的比较常规的方法,每次扫描整个序列,计算胜者和负者,分入两个数组,然后把这两个数组归并回原来的序列里(因为这两个序列都已经有序,所以可以免去排序直接合并),题目中要求编号小的排在前面,因为归并是稳定排序所以不需要担心这些。

      其实本质来说就是个讲究技巧的模拟吧?

      下贴代码,风格照样丑。

      1 #include <algorithm>
      2 #include <iostream>
      3 #include <fstream>
      4 #include <cstdlib>
      5 #include <cstring>
      6 #include <cmath>
      7 using namespace std;
      8 ifstream fin("swiss.in");
      9 ofstream fout("swiss.out");
     10 struct per
     11 {
     12  int fs;
     13  int nl;
     14  int bh;
     15 };
     16 per player[200005];
     17 int Rs=0,ls=0,gz=0;
     18 per winner[100005]={0},loser[100005]={0};
     19 void Heib();
     20 bool px(per a,per b);
     21 int main(void)
     22 {
     23  fin>>Rs>>ls>>gz;
     24  Rs*=2;
     25  for(int i=1;i<=Rs;i++)
     26     {
     27      fin>>player[i].fs;
     28      player[i].bh=i;
     29  }
     30  for(int i=1;i<=Rs;i++)fin>>player[i].nl;
     31  sort(player+1,player+Rs+1,px);
     32  for(int i=1;i<=ls;i++)
     33     {
     34       for(int j=1;j<=Rs;j++)
     35          {
     36           if(j%2==0)
     37             {
     38              if(player[j].bh==127||player[j-1].bh==127)
     39               {
     40      }
     41              if(player[j].nl>player[j-1].nl)
     42                {
     43                 winner[j/2].bh=player[j].bh;
     44                 winner[j/2].fs=player[j].fs+1;
     45                 winner[j/2].nl=player[j].nl;
     46                 loser[j/2].bh=player[j-1].bh;
     47                 loser[j/2].fs=player[j-1].fs;
     48                 loser[j/2].nl=player[j-1].nl;
     49                }
     50              else 
     51                {
     52                 winner[j/2].bh=player[j-1].bh;
     53                 winner[j/2].fs=player[j-1].fs+1;
     54                 winner[j/2].nl=player[j-1].nl;
     55                 loser[j/2].bh=player[j].bh;
     56                 loser[j/2].fs=player[j].fs;
     57                 loser[j/2].nl=player[j].nl;
     58                }
     59             }
     60          }
     61      Heib();
     62     }
     63  fout<<player[gz].bh;
     64  return 0;
     65 }
     66 
     67 bool px(per a,per b)
     68 {
     69  if(a.fs>b.fs)return 1;
     70  if(a.fs==b.fs&&a.bh<b.bh)return 1;
     71  if(a.fs==b.fs&&a.bh>b.bh)return 0;
     72  return 0;
     73 }
     74 
     75 
     76 void Heib()
     77 {
     78  int lf=1,rt=1,zz=1;
     79  while(lf<=Rs/2&&rt<=Rs/2)
     80       {
     81        if(winner[lf].fs>loser[rt].fs||(winner[lf].fs==loser[rt].fs&&winner[lf].bh<loser[rt].bh))
     82          {
     83           player[zz].bh=winner[lf].bh;
     84           player[zz].fs=winner[lf].fs;
     85           player[zz].nl=winner[lf].nl;
     86           zz++;
     87           lf++;
     88          }
     89        if(winner[lf].fs<loser[rt].fs||(winner[lf].fs==loser[rt].fs&&winner[lf].bh>loser[rt].bh))
     90          {
     91           player[zz].bh=loser[rt].bh;
     92           player[zz].fs=loser[rt].fs;
     93           player[zz].nl=loser[rt].nl;
     94           zz++;
     95           rt++;
     96          }
     97       }
     98  while(lf<=Rs/2||rt<=Rs/2)
     99      {
    100       if(lf<=Rs/2)
    101         {
    102          player[zz].bh=winner[lf].bh;
    103          player[zz].fs=winner[lf].fs;
    104          player[zz].nl=winner[lf].nl;
    105          lf++; 
    106   }
    107       if(rt<=Rs/2)
    108         {
    109           player[zz].bh=loser[rt].bh;
    110           player[zz].fs=loser[rt].fs;
    111           player[zz].nl=loser[rt].nl;
    112           rt++;
    113         }
    114      zz++;
    115      }
    116  return;
    117 }
    118 
    119  

    【题外话2:其实两篇解题报告之间我还A了几道题,不过都太简单或者太恶心到我不想写题解……OYZ】

    【题外话3:这里是个准初三狗,一开学成了初三狗之后估计就不会太快更新了……】

  • 相关阅读:
    网络基础
    Linux安装Redis
    mongodb——文档操作
    mangodb——集合的操作
    Linux安装MongoDB
    2021-10-14软件设计师
    2021-10-13
    How do you use System.Drawing in .NET Core?
    C# 9.0 新特性
    Mysql存储引擎
  • 原文地址:https://www.cnblogs.com/CYWer/p/4748519.html
Copyright © 2011-2022 走看看