#HK5395. 「ROI 2014 Day 1」彼得与机器人
「ROI 2014 Day 1」彼得与机器人
题目描述
译自 ROI 2014 Day1 T3. Петя и Робот
彼得的书架上摆放着 本笔记本,里面记录了他所有的创意想法。这些笔记本编号为从 到 的不同整数。彼得有一个习惯的摆放顺序(不一定是按编号顺序),他不喜欢别人打乱这个顺序。彼得购买了一个特殊的机器人,这个机器人能够记住笔记本的摆放顺序,并计算出该顺序中的错序数量。
机器人认为,如果一本编号较小的笔记本摆放在编号较大的笔记本右侧,则这两本笔记本构成一个错序。例如,在摆放顺序 中,错序对有 、 和 三对,因此错序数量为 。
在房间装修后,彼得忘记了笔记本的习惯摆放顺序,想要恢复原来的顺序。机器人保存了这个顺序,但它只会报告保存顺序中的错序数量。彼得可以请求机器人交换保存顺序中两本笔记本的位置。每次请求后,机器人会保存新的顺序并报告新顺序中的错序数量。彼得可以重复进行这样的请求,直到他认为自己收集了足够的信息来恢复习惯摆放顺序。
你需要编写一个程序,通过与机器人交互,恢复彼得笔记本的习惯摆放顺序。
交互方式
这是一个交互题。在运行过程中,你的程序将通过标准输入/输出流与评测程序交互,评测程序模拟机器人的行为。
首先,你的程序应从标准输入流读取两个整数 和 ,分别表示彼得的笔记本数量以及习惯摆放顺序中的错序数量。
随后,你的程序与评测程序的交互协议如下:
- 要交换两本笔记本的位置,你的程序应向标准输出流输出一个请求,格式为:
swap i j,其中 和 是要交换的笔记本位置编号。之后,程序应从标准输入流读取一个整数,即交换后顺序中的错序数量。你的程序最多可以进行 次此类请求。 - 当你的程序确定已经恢复了习惯摆放顺序时,应输出该顺序,格式为:
answer p,其中 是由 个不同整数(范围从 到 )组成的序列,表示恢复的摆放顺序,然后程序应结束运行。
交换请求和输出习惯摆放顺序的语句必须以换行符结尾,并刷新输出流缓冲区。为此,可以在 Pascal/Delphi 中使用 flush(output);在 C/C++ 中使用 fflush(stdout) 或 cout.flush()。
3 2
1
0
swap 1 3
swap 3 2
answer 2 3 1
数据范围与提示
详细子任务附加限制及分值如下表所示:
| 子任务 | 分值 | 附加限制 | 说明 |
|---|---|---|---|
| 需通过该子任务所有测试点才可获得分数 | |||
| 每个测试点独立评分 | |||