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

📄 pku2868.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
#include <stdio.h>

int calc(int N, int p)
{
	int tmp, i, j, len, pown, s, t;
	len = 1;
	tmp = p - 1;
	int stack[100];
	
	if (N >= p)
	{
		return p - 1;
	}

	pown = 1;
	t = 1;
	while (tmp / (t * N) >= pown)
	{
		tmp -= pown * t * N;
		t++;
		pown *= N;
		len++;
	}
	tmp = p;
	pown = N;
	for (i = 1; i < len; i++)
	{
		tmp -= pown * i;
		pown *= N;
	}

	if (tmp % (N * len) == 0)
	{
		return N - 1;
	}

	s = (tmp + len - 1) % len + 1;
	tmp = (tmp - 1) / len;
	
	for (i = len; i > s; i--)
	{
		tmp /= N;
	}
	return tmp% N;
}

int main()
{
	int i, j, p;
	int N, Q;
	char name[27][110];
	
	while (scanf("%d %d", &N, &Q) != -1)
	{
		if (N == 0 && Q == 0)
		{
			break;
		}

		for (i = 0; i < N; i++)
		{
			scanf("%s", name[i]);
		}

		while (Q--)
		{
			scanf("%d", &p);
			if (N == 1)
			{
				printf("%s\n", name[0]);
			}
			else
			{
				printf("%s\n", name[calc(N, p)]);
			}
		}
		printf("\n");
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -