#P15884. [Roi2022 Team]Wires Puzzle电线谜题
[Roi2022 Team]Wires Puzzle电线谜题
题目描述
有 根相同的电线穿过一根不透明管道。管道有左端和右端。朋友们在管道两端各能看到 个线头,两端线头都分别用 到 的不同整数标号,但同一根电线在左端和右端的标号可能不同。
你需要确定左右两端线头的对应关系。也就是说,对每个 ,找出整数 ,使得右端标号为 的电线在左端的标号为 。
为了解决这个谜题,你可以进行询问。一次询问中,你选择一个整数 ,并把右端的 根电线分成 个非空组,然后把同一组内的右端线头全部连接起来。随后,特殊设备可以在左端检测哪些线头的右端被连接在同一组中。也就是说,你会得到左端线头按照本次右端分组后的分组结果。
要求使用恰好三次询问找出完整对应关系。
交互协议
程序开始时,从标准输入读入一个整数 :
然后程序必须恰好进行三次询问。
一次询问的输出格式为:先输出一个整数 ,表示组数。随后输出 个整数
满足 ,并且 到 中每个整数都至少出现一次。 表示右端标号为 的电线被分到第 组。
评测程序会返回这 个组在左端的对应信息。第 个返回组的信息首先包含一个整数 ,表示该组大小;随后包含 个整数,表示这个组中电线左端的标号。
注意:评测程序返回的组的顺序以及每组内线头的顺序都是任意的,可能与询问中的组编号不同。
完成恰好三次询问后,程序需要输出 个整数:
其中 是右端标号为 的电线在左端的标号。
重要提示
- 这是交互题。每次输出询问后都必须刷新输出缓冲区。
- C++ 中可以使用
cout << endl;,或输出换行后调用cout.flush();。 - 不要输出多余内容,否则可能被判为格式错误或答案错误。
- 在 Hydro OJ 中,测试数据文件内保存的是隐藏排列;选手程序实际只能通过交互读到 ,无法直接读到排列。
样例说明
设 ,隐藏对应关系为:
一次可能的交互过程如下。空行仅用于阅读,实际交互中没有空行。
评测程序 -> 选手程序:
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