第七届山东省省赛D Swiss-system tournament(归并排序)

题意:

给出2n个选手的id,能力值和初始分数

然后按分数从大到小,id从小到大排序

相邻的选手打

能力值大的分数+1

进行r轮

问你比赛过后,排名第q的选手id是多少

思路:

开始先sort一遍,每一轮比赛都归并处理

赢得人分一组,输的人分一组,保证两组有序

然后合并到原数组

持续r轮后输出结果就好了

/* ***********************************************
Author        :devil
Created Time  :2016/6/10 14:24:16
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <stdlib.h>
using namespace std;
const int N=1e5+10;
int n;
struct wq
{
    int id,score,cap;
    void push(int a,int b,int c)
    {
        id=a;
        score=b;
        cap=c;
    }
}eg[N<<1],eg1[N],eg2[N];
bool cmp(wq a,wq b)
{
    if(a.score!=b.score) return a.score>b.score;
    return a.id<b.id;
}
void fun()
{
    int l1=1,l2=1;
    for(int i=1;i<=n;i+=2)
    {
        if(eg[i].cap>eg[i+1].cap||eg[i].cap==eg[i+1].cap&&eg[i].id<eg[i+1].id)
        {
            eg1[l1++].push(eg[i].id,eg[i].score+1,eg[i].cap);
            eg2[l2++]=eg[i+1];
        }
        else
        {
            eg1[l1++].push(eg[i+1].id,eg[i+1].score+1,eg[i+1].cap);
            eg2[l2++]=eg[i];
        }
    }
    int a=1,b=1,c=1;
    while(a<l1&&b<l2)
    {
        if(eg1[a].score>eg2[b].score||eg1[a].score==eg2[b].score&&eg1[a].id<eg2[b].id)
            eg[c++]=eg1[a++];
        else eg[c++]=eg2[b++];
    }
    while(a<l1) eg[c++]=eg1[a++];
    while(b<l2) eg[c++]=eg2[b++];
}
int main()
{
    //freopen("in.txt","r",stdin);
    int t,r,q;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&r,&q);
        n<<=1;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&eg[i].score);
            eg[i].id=i;
        }
        for(int i=1;i<=n;i++)
            scanf("%d",&eg[i].cap);
        sort(eg+1,eg+n+1,cmp);
        while(r--)
            fun();
        printf("%d\n",eg[q].id);
    }
    return 0;
}
时间: 2024-10-27 05:20:08

第七届山东省省赛D Swiss-system tournament(归并排序)的相关文章

第七届山东省省赛C Proxy(最短路)

题意: 给出n个点和一些单向边,问从0到n+1 如果不能到则输出-1 如果能一步到则输出0 否则输出第一个到达的节点 如果两条路距离相等,则输出较小的节点 思路: 赛场上从前向后扫然后又向前推的,,,特别别扭 回来之后想了下,可以建反向边,从n+1走到0记录前驱就好了 /* *********************************************** Author :devil Created Time :2016/6/10 14:20:54 *****************

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

第七届山东省ACM省赛

激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道输出济南有多少泉水的水题,竟然第二次就猜对了,有个队交了四五十次…山师很心机的把酒店安排在了商业区.闹市和女子学院附近…(开个玩笑)为了不败第二天人品,我老老实实地待在了酒店,并没有出去嗨…正式赛开了…比赛打得多了,真的不紧张了…或许是喝了磊神指定饮料-红牛的作用…A是个签到题,我和Julyc讨论一

【第七届山东省ACM竞赛】Square Number

思路比较明确,就是一个数,如果和另外一个数乘起来是个平方数的话,那么满足一个条件 数A可以分解成为n1 个 a1,n2 个 a2 -- 数B可以分解成为m1个 a1,m2 个 a2-- 这满足的条件是(ni + mi) % 2 == 0 一个数的分解出来奇个数的因子乘起来得到的值为v,找之前有几个数他的奇个数因子成积为v 代码如下: #include<cmath> #include<cstdio> #include<cstring> #include<iostre

科来杯”第七届山东省大学生 网络安全技能大赛

[Reserve] [re-elf] [babyLogin] v10和v11差一个字节,在内存中.所以 v11[0-1] 就是v10的地址 最后结果是求v1,所以逆向算法就是(byte_40925C[i*2] ^ byte_409034[dword_40924C[i % 4]] ^ 0x68) - 2 [Moblie] 加密:对字符串的每位的ascii+1 解密:对字符串的每位的ascii-1 [web] [有趣的PHP与JS ] 打不开了没法截图了 XFF第一层绕过 修改UA第二层绕过 md5

第七届山东省大学生网络安全技能大赛 file

打开IDA直接F5如下 经过分析箭头处才是最关键的 encode函数虽然是引用,但是函数内并没有对其进行修改,而是将其副本base64加密 查询到 flllag 和 sttr_home 的值 计算v13的值 计算过程直接复制粘贴,修改到能编译就行了 然后异或出来goal 也就是我们的输入 #include<bits/stdc++.h> using namespace std; string str="664e06226625425d562e766e042d422c072c45692d

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共

??第七届河南省赛B.海岛争霸(并差集)

B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 130  Solved: 48 [Submit][Status][Web Board] Description 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王. 这是一个由海洋.岛屿和海盗组成的危险世界.杰克船长准备从自己所占领的岛屿A开始征程,逐个去占领每一个岛屿.面对危

第七届河南省赛H.Rectangles(lis)

10396: H.Rectangles Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 229  Solved: 33 [Submit][Status][Web Board] Description Given N (4 <= N <= 100)  rectangles and the lengths of their sides ( integers in the range 1..1,000), write a program that fi