C. [CFCOI Collection 4] 排列游戏 3

    交互题 1000ms 256MiB

[CFCOI Collection 4] 排列游戏 3

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

注意

这是一道交互题。

请严格按照【交互方式】进行操作,否则评测结果不可预料。

题目描述

小 H 手上有一个 1∼n1 \sim n 的排列 p1,p2,⋯ ,pnp_1,p_2,\cdots,p_n,并指定了一个整数 kk。

你可以向小 H 提出以下类型的询问:

  • 给定互不相同的 i1,i2,⋯ ,iki_1,i_2,\cdots,i_k,询问 pi1,pi2,⋯ ,pikp_{i_1},p_{i_2},\cdots,p_{i_k} 升序排序后的结果。

请使用不超过 CC 次询问求出排列 pp。

交互方式

首先,你需要读入 33 个整数 n,k,Cn,k,C。

接下来你可以输出 ? i1 i2 ⋯ ik\texttt{?} \ i_1 \ i_2 \ \cdots \ i_k 进行一次询问,需要保证 1≤i1<i2<⋯<ik≤n1 \le i_1 < i_2 < \cdots < i_k \le n。然后读入一行 kk 个整数 j1,j2,⋯ ,jkj_1,j_2,\cdots,j_k 表示询问结果。

如果你已经通过询问求出了排列 pp,你需要输出一行 ! p1 p2 ⋯ pn\texttt{!} \ p_1 \ p_2 \ \cdots \ p_n 表示你求出的排列 pp。

每次输出都需要输出换行并且刷新缓冲区,否则你可能会得到意料之外的结果。

如何刷新缓冲区?

  • 对于 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 600000

1 3

2 3

1 2
? 1 2

? 2 3

? 1 3

! 1 3 2

说明/提示

注意:

  • 样例不满足数据范围,因此一定不会出现在测试数据中。
  • 样例仅供交互方式参考,不保证有逻辑。

对于 100%100\% 的数据:

  • n=6 001n=6\,001;
  • 1≤k≤51 \le k \le 5;
  • 2 000≤C≤6 0002\,000 \le C \le 6\,000;
  • 交互库的总用时不超过 50 ms50 \ \text{ms}。

本题开启捆绑测试。

  • Subtask #1(20 pts20 \ \text{pts}):k=1,C=6 000k=1,C=6\,000。
  • Subtask #2(20 pts20 \ \text{pts}):k=2,C=4 000k=2,C=4\,000。
  • Subtask #3(20 pts20 \ \text{pts}):k=3,C=3 000k=3,C=3\,000。
  • Subtask #4(20 pts20 \ \text{pts}):k=4,C=2 400k=4,C=2\,400。
  • Subtask #5(20 pts20 \ \text{pts}):k=5,C=2 000k=5,C=2\,000。

Hamburger999's Birthday Contest

未参加
状态
已结束
规则
IOI
题目
7
开始于
2026-9-19 11:00
结束于
2026-10-5 19:00
持续时间
2 小时
主持人
参赛人数
9