#P14641. 【OIMO Round 1】进制整除

    ID: 14327 Type: RemoteJudge 1000ms 512MiB Tried: 0 Accepted: 0 Difficulty: (None) Uploaded By: Tags>交互题Special JudgeO2优化

【OIMO Round 1】进制整除

题目描述

这是一道交互题

X 和 H 玩腻了猜数游戏!于是他们开始玩填数游戏。这个游戏的规则是这样的:

首先,两人确定一个质数 pp 与一个正整数 nn,满足 n<pn<p,并创建一个长度为 pp 的数组 aa,下标从 00 开始。

然后,从 X 开始,两人轮流从 {0,1,,p1}\{0,1,\dots,p-1\} 中选择一个以前从未被选过的数 ii,并为 aia_i 赋一个整数值 xx,满足 0x<n0\le x<n。当所有数都被选择过后,游戏结束。

作为游戏的发起人,X 希望最终的数组 aa 满足 pp 整除 i=0p1aini\sum_{i=0}^{p-1}a_in^i。你能帮她进行这个游戏吗?

交互方式

你需要通过标准输入输出与评测机进行交互。

首先,你需要从标准输入中输入两个整数 p,np,n,含义见题面。

接下来,对于每个你的轮次,你需要向标准输出输出两个整数 i,xi,x,代表你选择的下标和值,然后输出一个换行并清空缓冲区。其中 ii 不应在之前的操作中出现,包括你的和 H 的操作。如果你的操作不合法,评测机将输出 ERROR,此时你应该立即终止你的程序。

对于每个 H 的轮次,你需要从标准输入中输入两个整数 i,xi,x,代表他选择的下标和值。保证 ii 不在之前的操作中出现过。

当游戏结束时,你应该立即终止你的程序。

你可以使用如下语句来清空缓冲区:

  • 对于 C/C++:fflush(stdout)
  • 对于 C++:std::cout << std::flush
  • 对于 Java:System.out.flush()
  • 对于 Python:stdout.flush()
  • 对于 Pascal:flush(output)
  • 对于其他语言,请自行查阅对应语言的帮助文档。

特别的,对于 C++ 语言,在输出换行时如果你使用 std::endl 而不是 '\n',也可以自动刷新缓冲区。建议使用std::endl以避免忘记输出换行。

输入格式

见【交互方式】。

输出格式

见【交互方式】。

3 2

0 0

1 1

2 1

提示

样例解释

在这里,我们有 a0n0+a1n1+a2n2=0×1+1×2+1×4=6a_0n^0+a_1n^1+a_2n^2=0\times1+1\times2+1\times4=6,显然 33 整除 66

本题采用捆绑测试

对于所有数据,1n<p1051\le n < p\le 10^5

  • Subtask 1(20 points):np+1107n^{p+1}\le 10^7
  • Subtask 2(10 points):n=2n=2
  • Subtask 3(10 points):n=p1n=p-1
  • Subtask 4(60 points):无特殊限制。

交互题会首先受到与传统题相同的限制,如时间,空间限制等。