美团点评CodeM编程大赛-题二

来源:互联网 发布:数控车床编程教学ppt 编辑:程序博客网 时间:2024/05/17 22:35

美团点评CodeM编程大赛-题二

  • 题目描述

    组委会正在为美团点评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

  • 语言

    JAVA JDK1.7

  • 代码
import java.util.Arrays;import java.util.Scanner;/** * @ClassName: * @Description: * @Author: Arthur * @Date: 2017/6/15 17:23 * @version: V1.0.0.0 */public class Main {    public static void main(String[] args) {       Scanner sc = new Scanner(System.in);        //参赛总人数        int n = sc.nextInt();        int[] score = new int[n];        //参赛者积分        for (int i = 0; i < n; i++) {            score[i] = sc.nextInt();        }        int myScore = score[0];        int myIndex=0;        Arrays.sort(score);        for (int i=0; i<n;i++) {            if (myScore>=score[i])myIndex=i;        }        if (myIndex==0){            System.out.println(0);        }else {            int turnNum = (int) (Math.log(myIndex) / Math.log(2));            System.out.println(turnNum);        }    }}

注:这里只做了简单的实现,具体的时间优化,内存优化还未考虑。

原创粉丝点击