组委会正在为美团点评CodeM大赛的决赛设计新赛制

比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛、复赛的成绩,会有不同的积分。比赛采取锦标赛赛制,分轮次进行,设某一轮有 m 个人参加,那么参赛者会被分为 m/2 组,每组恰好 2 人,m/2 组的人分别厮杀。我们假定积分高的人肯定获胜,若积分一样,则随机产生获胜者。获胜者获得参加下一轮的资格,输的人被淘汰。重复这个过程,直至决出冠军。

现在请问,参赛者小美最多可以活到第几轮(初始为第0轮)?

输入描述:
第一行一个整数 n (1≤n≤ 2^20),表示参加比赛的总人数。
接下来 n 个数字(数字范围:-1000000…1000000),表示每个参赛者的积分。
小美是第一个参赛者。
输出描述:
小美最多参赛的轮次。
输入例子:
4
4 1 2 3
输出例子:
2

模拟一下比赛过程即可:

我的思路是,尽量让小美和比她分数低(包括相同,因为相同时是随机比赛结果,且要求能通过的最大比赛场次)的选手去比赛,那么首先想到排序,再求出小美分数在排序数组中的上界,计算出比小美分数高的选手数量r,然后就是模拟比赛的过程。

将选手划分为两个阵营(l:分数<=小美的选手,包括小美; r: 分数>小美的选手)。

规则是:在一轮比赛中,如果r为奇数,需要在l个中,抽一个(比小美分数小的)给r才能比赛,

      如果l==1,即只剩小美一个人了,那这局肯定是输的,不计算在内,这时可能r中可能还有选手,但小美只能到这了。

      如果l>1,那这一轮比赛分别在l-1个选手, 与r+1个选手, 两个阵营内进行。小美在l阵营中,肯定会赢。胜利次数+1。

    在一轮比赛中,如果r 为0,小美一直比下去。

代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> a;
    int data;
    for( int i = 0; i < n; i++ )
    {
        cin >> data;
        a.push_back( data );
    }
    data = a[0];
    sort( a.begin(), a.end() );
    int r = a.end() - upper_bound( a.begin(), a.end(), data );

    //cout << "r is: " << r << endl;

    int l = n - r;
    int cnt = 0;
    if( r == 0 )
    {
        cnt += ( l / 2 );
    }

    while( r > 0 && l > 1 )
    {
        if( r & 1 )
        {
            r++;
            l--;
        }
        cnt++;
        r /= 2;
        l /= 2;
    }
    cout << cnt << endl;
    return 0;
}
时间: 2024-10-18 09:43:47

组委会正在为美团点评CodeM大赛的决赛设计新赛制的相关文章

CodeM 2017美团点评编程大赛资格赛

音乐研究 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小.两段等长音频的 difference 定义为:difference = SUM(a[i] - b[i])2 (1 ≤ i ≤ n),

CodeM美团点评编程大赛初赛A轮

因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的方式是:n个人排成一列跑步,前后两人之间相隔 u 米,每个人正常速度均为 v 米/秒.当某个配送员排在最后的时候,他需要以当时自己的最高速度往前跑,直到超过排头的人 u 米,然后降回到原始速度 v 米/秒.每个人最初的最高速度为c[i] 米/秒,每轮衰减d[i] 米/秒,也就是说,如果i是第j个跑的

CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

[编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色的. 你需要通过一系列操作使得最终每个点变成黑色.每次操作需要选择一个节点i,i必须是白色的,然后i到根的链上(包括节点i与根)所有与节点i距离小于k[i]的点都会变黑,已经是黑的点保持为黑.问最少使用几次操作能把整棵树变黑. 输入描述: 第一行一个整数n (1 ≤ n ≤ 10^5) 接下来n-1

CodeM美团点评编程竞赛资格赛题

最近看到牛课网美团一个编程竞赛,想着做做看,结果一写就是两天..真是写不动了啊.话不多说,下面开始我的题解. 题目大致还是比较考察思维和代码能力(因为自己代码能力较弱,才会觉得比较考察代码能力吧= =!),难度由简到难变化也比较适中,有签到题.有算法实现,当然也有稍稍一点代码量的题.感谢美团点评,提供一套合适的题目~ 音乐研究 题目描述 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分.具体地

docker最佳实践-----美团点评的分享

美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台(以下简称"容器平台").该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台.目前该平台为美团点评的外卖.酒店.到店.猫眼等十几个事业部提供容器计算服务,承载线上业务数百个,日均线上请求超过45亿次,业务类型涵盖Web.数据库.缓存.消息队列等. 为什么要开发容器管理平台 作为国内大型的O2O互联网公司,美团点评业务发展极为迅速,每天线上发生海量的搜索.推广和在线交易.在容器平台实施

O2O已死?不!美团点评们迎来新风口

当年的千团大战,巅峰时期曾涌入了5000多家团购网站,刘旷本人也参与了此次团购大战.而就在当时很多人都唱衰团购的时候,美团和大众点评却最终脱颖而出,市值一路飙升,人人网旗下的糯米网因为卖给了百度,也得以在市场上占得了一席之地. 2015年的上半年,O2O全面爆发,资本市场一片火爆,所有人都盲目风:2015年的下半年,无数O2O创业公司倒闭,于是资本市场和创业者们都开始唱衰O2O.实际上,O2O淘汰的都是那些实力较弱的公司,只不过因为参与者过多.涉及行业较广,于是很多人误认为O2O创业根本就不会成

深度学习在美团点评推荐平台排序中的应用--学习笔记

写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运用 原创 2017-07-28 潘晖 美团点评技术团队 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户

深度学习在美团点评推荐平台排序中的运用

深度学习在美团点评推荐平台排序中的运用 原文地址:https://tech.meituan.com/dl.html 潘晖 美团点评搜索推荐团队 ·2017-07-28 14:33 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户提供感兴趣的内容,帮用户更快速方便的找到所求.我们目标是根据用户的兴趣及行为

美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 题解: 写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂. #include <cstdio> int