📄 pku1241.cpp
字号:
#include <stdio.h>
int Num[2000];
int N;
int Two(int X)
{
return 1<<X;
}
void Rev(int s, int e)
{
int t;
while (s < e)
{
t = Num[s];
Num[s] = Num[e];
Num[e] = t;
s++;
e--;
}
}
void Calc(int id)
{
int f, b, T_id, t, pos;
int i;
T_id = id;
pos = 1;
while (Num[pos] != T_id) pos++;
i = 1;
while (pos>>i) i++;
b = Two(N) + 1 - Two(N - i + 1);
f = 1;
while (pos>>1)
{
if (Num[pos] != Num[pos>>1])
{
f++;
}
pos >>= 1;
}
printf("Player %d can be ranked as high as %d or as low as %d.\n", id, f, b);
}
void Solve()
{
int i, t, id;
for (i = Two(N) - 1; i > 0; i--)
{
scanf("%d", &Num[i]);
}
for (i = 1; i < N; i++)
{
Rev(Two(i), Two(i + 1) - 1);
}
for (i = 0; i <= Two(N); i++)
{
Num[i + Two(N)] = i + 1;
}
scanf("%d", &t);
while (t--)
{
scanf("%d", &id);
Calc(id);
}
printf("\n");
}
int main()
{
while (scanf("%d", &N) != -1 && N)
{
Solve();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -