#P15884. [Roi2022 Team]Wires Puzzle电线谜题

[Roi2022 Team]Wires Puzzle电线谜题

题目描述

nn 根相同的电线穿过一根不透明管道。管道有左端和右端。朋友们在管道两端各能看到 nn 个线头,两端线头都分别用 11nn 的不同整数标号,但同一根电线在左端和右端的标号可能不同。

你需要确定左右两端线头的对应关系。也就是说,对每个 i=1,2,,ni=1,2,\ldots,n,找出整数 aia_i,使得右端标号为 ii 的电线在左端的标号为 aia_i

为了解决这个谜题,你可以进行询问。一次询问中,你选择一个整数 kk,并把右端的 nn 根电线分成 kk 个非空组,然后把同一组内的右端线头全部连接起来。随后,特殊设备可以在左端检测哪些线头的右端被连接在同一组中。也就是说,你会得到左端线头按照本次右端分组后的分组结果。

要求使用恰好三次询问找出完整对应关系。

交互协议

程序开始时,从标准输入读入一个整数 nn

3n200.3\le n\le 200.

然后程序必须恰好进行三次询问。

一次询问的输出格式为:先输出一个整数 kk,表示组数。随后输出 nn 个整数

g1,g2,,gn,g_1,g_2,\ldots,g_n,

满足 1gik1\le g_i\le k,并且 11kk 中每个整数都至少出现一次。gig_i 表示右端标号为 ii 的电线被分到第 gig_i 组。

评测程序会返回这 kk 个组在左端的对应信息。第 jj 个返回组的信息首先包含一个整数 sjs_j,表示该组大小;随后包含 sjs_j 个整数,表示这个组中电线左端的标号。

注意:评测程序返回的组的顺序以及每组内线头的顺序都是任意的,可能与询问中的组编号不同。

完成恰好三次询问后,程序需要输出 nn 个整数:

a1,a2,,an,a_1,a_2,\ldots,a_n,

其中 aia_i 是右端标号为 ii 的电线在左端的标号。

重要提示

  • 这是交互题。每次输出询问后都必须刷新输出缓冲区。
  • C++ 中可以使用 cout << endl;,或输出换行后调用 cout.flush();
  • 不要输出多余内容,否则可能被判为格式错误或答案错误。
  • 在 Hydro OJ 中,测试数据文件内保存的是隐藏排列;选手程序实际只能通过交互读到 nn,无法直接读到排列。

样例说明

n=4n=4,隐藏对应关系为:

[a1,a2,a3,a4]=[2,3,4,1].[a_1,a_2,a_3,a_4]=[2,3,4,1].

一次可能的交互过程如下。空行仅用于阅读,实际交互中没有空行。

评测程序 -> 选手程序:
4

选手程序 -> 评测程序:
3
1 1 3 2

评测程序 -> 选手程序:
2
2 3
1
1
1
4

选手程序 -> 评测程序:
2
1 1 1 2

评测程序 -> 选手程序:
1
1
3
2 3 4

选手程序 -> 评测程序:
2
2 1 2 2

评测程序 -> 选手程序:
1
3
3
1 2 4

选手程序最终输出:
2 3 4 1