⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku1241.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 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 + -