首先定义结构体,存好队伍编号和实力。
struct t{
int p;
int nu;
}te[520];
然后这么做:进行 n - 1 次循环,每次循环之中
把 te[1] 和 te[2] 比较,并把结果存储到 te[1] 中
把 te[3] 和 te[4] 比较,并把结果存储到 te[2] 中
以此类推
这样一来,每一次循环过后数组的有效长度都会缩短为原来的一半,而且满足题意。
当长度缩短为 2 的时候,比较 te[1] 和 te[2] 并且输出就行了。
虽然我说的很清楚,但是我的码还是没过。求助。
以下是代码:
#include <bits/stdc++.h>
using namespace std;
struct t{
int p;
int nu;
}te[520];
int n;
int main(void) {
scanf("%d", &n);
for (int i = 1; i <= pow(2, n); i++) {
scanf("%d", &te[i].p);
te[i].nu = i;
}
for (int i = 3; i >= 2; i--) {
for (int j = 1; j <= pow(2, i); j += 2) {
if (te[j].p > te[j + 1].p) {
te[(j + 1)/2] = te[j];
} else {
te[(j + 1)/2] = te[j + 1];
}
}
}
if (te[1].p > te[2].p) printf("%d", te[2].nu);
else printf("%d", te[1].nu);
return 0;
}