题目链接:uva 11714 - Blind Sorting
题目大意:给出n个数,每次可以比较两个数的大小,问,最坏请款需要需要几次比较可以得出最大的两个值。
解题思路:首先类似淘汰赛的方式选出最大值,然后用非胜出方的子树根位置的值和胜出方所有各层败给最大值的数进行比较。ans = n - ceil(log2(n)) - 2.
#include <stdio.h>
#include <math.h>
int main() {
int n;
while (scanf("%d", &n) == 1) {
printf("%d\n", n + (int)ceil(log2((double)n)) - 2);
}
return 0;
}