空間限制:32768K
題目描述
比賽有 n 個人參加(其中 n 爲2的冪),每個參賽者根據資格賽和預賽、複賽的成績,會有不同的積分。比賽採取錦標賽賽制,分輪次進行,設某一輪有 m 個人參加,那麼參賽者會被分爲 m/2 組,每組恰好 2 人,m/2 組的人分別廝殺。我們假定積分高的人肯定獲勝,若積分一樣,則隨機產生獲勝者。獲勝者獲得參加下一輪的資格,輸的人被淘汰。重複這個過程,直至決出冠軍。
現在請問,參賽者小美最多可以活到第幾輪(初始爲第0輪)?
輸入描述:
第一行一個整數 n (1≤n≤ 2^20),表示參加比賽的總人數。 接下來 n 個數字(數字範圍:-1000000…1000000),表示每個參賽者的積分。 小美是第一個參賽者。
輸出描述:
小美最多參賽的輪次。
輸入例子:
4 4 1 2 3
輸出例子:
2
就是把所有積分<=小美的挑出來,然後讓他們之間比,小美肯定在食物鏈頂端(也就是一個滿二叉樹的根節點),所以你只要判斷這麼多點能組成的滿二叉樹最高高度是多少就行了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
const int maxn = 1050;
int main()
{
//freopen("Text.txt", "r", stdin);
int n, a,b,c;
while (scanf("%d", &n)!=EOF) {
c = 1;
scanf("%d", &a);
while (n>1) {
scanf("%d", &b);
if (b <= a)
c++;
n--;
}
//printf("%d\n", c);
printf("%d\n", (int)log2(c));
}
return 0;
}