#B4436. [语言月赛 202511] 彩云曼波

    ID: 14471 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 3 上传者: 标签>2025交互题Special Judge函数与递归语言月赛

[语言月赛 202511] 彩云曼波

题目背景

这是一道交互题。

题目描述

共有 nn 个瓶子排成一列,每个瓶子有且只有一个 1n1\sim n 范围内的颜色,没有两个瓶子颜色相同。

你需要猜测瓶子的颜色顺序。你可以向交互库询问你的猜测是否正确。每次询问,你应当向标准输出输出一行 nn 个整数,表示从左至右瓶子的颜色,然后输出一个换行并清空缓冲区

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

  • 对于 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以避免忘记输出换行。

然后你需要从标准输入中输入一个整数,代表交互库返回的结果。为 00 则表示猜测错误,为 11 则表示猜测正确。

你最多询问 4032040320 次。

输入格式

首先读入一个整数 nn

之后,每次询问后读入一个 0011 的整数。

当你读入 11 后,应当立即结束程序。

输出格式

每次询问,输出一行 nn 个整数。

5

0

1

1 2 3 5 4

1 2 3 4 5

提示

对于 100%100\% 的测试数据,1n81 \le n \le 8

示例程序:

#include<bits/stdc++.h>
using namespace std;

int main() {
  int n, result;
  cin >> n;
  // 向标准输出输出一行 n 个整数,表示从左至右瓶子的颜色
  for(int i = 1; i <= n; i++) {
    cout << i << ' ';
  }
  // 然后输出一个换行并清空缓冲区
  cout << endl; fflush(stdout);
  // 从标准输入中输入一个整数,代表交互库返回的结果
  cin >> result;
  // 当你读入 1 后,应当立即结束程序。
  if(result) return 0;
  for(int i = n; i >= 1; i--) {
    cout << i << ' ';
  }
  cout << endl; fflush(stdout);
  cin >> result;
  if(result) return 0;
  return 0;
}