Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## 這麽個水題竟然嚷盎一次

Posted by KatrineYang at 2016-09-01 02:08:54 on Problem 1241 and last updated at 2016-09-01 02:09:15
```rt
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int N;

int main() {
while(scanf("%d", &N) > 0){
if(N == 0) break;
int H[300] = {0}, win[300] = {0};
vector<int> data;
for(int i = 1; i <= N; i++){
for(int j = 0; j < (1 << (N-i)); j++){
int temp;
scanf("%d", &temp);
if(i != N) data.push_back(temp);
H[temp] = i;
}
}
int sz = data.size();
for(int i = 1; i <= (1<<N); i+=2){
if(H[i] == 0) win[i] = i+1;
else win[i+1] = i;
}
for(int i = 0; i < sz-1; i+=2){
if(H[data[i]] > H[data[i+1]]) win[data[i+1]] = data[i];
else win[data[i]] = data[i+1];
}
//for(int i = 1; i <= (1<<N); i++) cout << win[i] << " "; cout << endl;
int qgs;
scanf("%d", &qgs);
for(int i = 0; i < qgs; i++){
int q;
scanf("%d", &q);
int Q = q;
int low, high = 1;
low = (1<<N) - (1<<H[q]) + 1;
while(win[q] != 0){
high++;
q = win[q];
}
printf("Player %d can be ranked as high as %d or as low as %d.\n", Q, high, low);
}
printf("\n");
}
return 0;
}
```

Followed by: