#P7321. 「PMOI-4」猜排列

    ID: 6217 远端评测题 1000ms 500MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>交互题Special JudgeO2优化洛谷月赛

「PMOI-4」猜排列

题目背景

这是一道 IO 交互题。

请各位选手确认好再提交,防止评测机爆炸。

题目描述

小 A 有一个长度为 nn排列 aa,他想请你猜一猜这个排列。你仅能给出以下两种询问:

  • ! x y,他将会告诉你 axmodaya_x \bmod a_y 的值,其中你询问的数应当满足 ax>aya_x\gt a_yxyx\ne y;否则,他会不高兴并直接判定询问不合法,从而导致 WA
  • ? l S p,你需要给小 A 一个大小为 ll 的集合 SS 与一个整数 pp,其中 S={x1,x2,x3,,xl}S=\{x_1,x_2,x_3,\ldots,x_l\},其中对于任意 1il1\le i\le l1xin1\le x_i\le n,且 xix_i 互不相同,还要满足 1pn1\le p\le n1ln1\le l\le n,小 A 将会告诉你这个集合中 axkpa_{x_k} \ge p 的所有的 xkx_k,返回形式如下:首先会返回一个整数 LL,接着会返回 LL 个整数,表示有 LL 个满足条件的 kk(注意返回的是集合 SS 中的元素,而不是下标!)。

你最多只能向小 A 询问 m1m_1 个问题 11m2m_2 个问题 22,其中问题二中询问的集合大小之和应不超过 m3m_3 来猜出这个序列。

输入格式

输入排列的长度 nnm1,m2,m3m_1,m_2,m_3 以开始交互。

交互过程中,您可以进行题目描述中的两种询问。无论是第一种询问还是第二种询问,交互库都会返回一个整数。

在您确定答案后,请以 A a[1] a[2] ... a[n-1] a[n] 的形式输出一行,停止交互。

在您输出一行后,请清空缓冲区:

  • 在 C++ 中,使用 fflush(stdout)cout.flush()
  • 在 Pascal 中,使用 flush(output)
  • 在 Python 中,使用 stdout.flush()
  • 其它语言请自行查阅文档。

输出格式

见「交互方式」。

3 100 100 100

1 3

1 2
? 3 1 2 3 3

? 2 1 2 2

A 1 2 3

提示

【数据范围】

本题采用捆绑测试。

Subtask 编号 分值 n=n= m1=m_1= m2=m_2= m3=m_3= 特殊限制
11 1010 44 11 44
22 5×1025 \times 10^2 2.5×1052.5\times 10^5
33 2×1042 \times 10^4 3×1053 \times 10^5 A
44 2020 10410^4 3030
55 5×1045 \times 10^4 3434 4×1054 \times 10^5
66 2525 1717 1.5×1051.5\times 10^5
77 55 1515

A:保证排列 aa 随机构造

【提示】

  1. 询问不合法或交互库输出数超过 mm 后继续询问会直接导致 WA。

  2. 数据范围的顶栏都是 == 而非 \le