P12400 [COI 2025] 人工智能 / Automatizacija(暂时无法评测)

题目背景

译自 [COI 2025](https://hsin.hr/hio2025/) T1。 我们在附件中提供了模板文件,你可以在这个文件的基础上进行编辑。 (我们在研究交互库的策略,暂时无法评测。)

题目描述

**这是一道通信题。** 为了方便评测,我们改为函数式交互题。 A 和 B 在玩游戏。 她们每个人都有一个大小为 $K$ 的**集合**,集合中元素为 $[1,N]$ 间的正整数(注意集合中元素两两不同)。 **A 和 B 只知道自己集合里面的元素**。游戏的目标是求出她们集合的交的大小。 A 和 B 不能直接通信,但她们可以用一块游戏板通信。我们给出通信的具体说明: - 游戏板初始时有 $N$ 个空格子。可以在空格子里面放小球。 - A 与 B 轮流在空格子中放小球,A 先操作。小球被放在空格子里面后,格子即被占据,不能再放小球。 - A 放蓝色的球,B 放红色的球。 - 在游戏全程中,A 与 B 都能实时得知游戏板的状态。 - 轮到一方操作时,有两种情况: - 仍有空格子剩余。操作方可以选择放小球,或者报告交的大小来结束游戏。 - 没有空格子了。操作方必须报告交的大小,结束游戏。 在游戏过程中,A 与 B 只能通过游戏板通信。但是在游戏开始之前,她们可以商量好游戏策略。 请你帮 A 与 B 确定一个游戏策略,使得至少有一个人能够在某一时刻正确猜出交的大小,结束游戏。 为了锻炼你的水平,我们要求你的策略用到的信息只包括当前游戏板的状态。换句话说,**你无法得知这个状态是如何转移过来的。** ### 实现细节 你需要实现两个函数。 ```cpp vector Alice(int N, int K, int T, vector S, vector states); vector Bob(int N, int K, int T, vector S, vector states); ``` 这两个函数的参数含义如下: - `N`:值域和游戏板的格子数。 - `K`:集合大小。 - `T`:该玩家可能遇到的状态数量。 - 在实际测试数据中,$T$ 严格等于可能遇到的状态数量。 - 但是在样例中,$T$ 可能比真实值小。 - `S`:一个长度为 $K$ 的数组,表示当前玩家持有的集合。 - `states`:一个长度为 $T$ 的数组,表示当前玩家可能遇到的所有状态。 - 每个状态用一个长度为 $N$ 的字符串 `state[0]~state[T-1]` 表示。 - 每个字符串 $S$ 中只有 $\texttt{P},\texttt{C},\texttt{.}$。其中,$S_{i-1}=\texttt{P}$ 代表格子 $i$ 中有蓝球,$S_{i-1}=\texttt{C}$ 代表格子 $i$ 中有红球,$S_{i-1}=\texttt{.}$ 代表格子 $i$ 是空的。 调用 Alice,表示你要确定 A 的策略;调用 Bob,表示你要确定 B 的策略。 你需要返回一个长度为 $T$ 的数组 `res`。每个元素是一个字符和一个正整数。 `res[i].first` 是字符 $\texttt{!}$ 或 $\texttt{+}$。 - 如果是 $\texttt{!}$,表示报告答案。`res[i].second` 表示报告的答案。此时,你需要保证 `res[i].second` 是 $[0,N]$ 间的一个整数。 - 如果是 $\texttt{?}$,表示放球。`res[i].second` 表示要放在哪个格子。此时,你需要保证 `res[i].second` 是 $[1,N]$ 间的一个整数,且这个格子是空的。 由于洛谷评测系统的限制,该程序将只被运行一次。如果你使用了全局变量,请注意清空。

输入格式

Sample Grader 输入格式如下: 第一行,正整数 $P$。$P=1$ 表示 Alice 的输入,$P=2$ 表示 Bob 的输入。 第二行,两个正整数 $N,K$。 第三行,$K$ 个正整数,表示集合中的元素。 第四行,正整数 $T$。 接下来 $T$ 行,每行一个字符串,描述一个状态。

输出格式

Sample Grader 输出 $T$ 行,每行一个操作。

说明/提示

### 样例解释 为了方便,样例只展示了一个可行的策略。解释如下: | 游戏板状态 | 操作 | 注记 | | :-: | :-: | :-: | | $\texttt{....}$ | $\texttt{+ 1}$ | A 在格子 $1$ 上放了一个球。 | | $\texttt{P...}$ | $\texttt{+ 3}$ | B 在格子 $3$ 上放了一个球。 | | $\texttt{P.C.}$ | $\texttt{+ 4}$ | A 在格子 $4$ 上放了一个球。 | | $\texttt{P.CP}$ | $\texttt{+ 2}$ | B 在格子 $2$ 上放了一个球。 | | $\texttt{PCCP}$ | $\texttt{! 1}$ | A 报告交集大小为 $1$,终止游戏。猜对了!| ### 数据范围 - $2\le N\le 16$; - $1\le K\le N$。 ### 子任务 - $\text{Subtask 0 (0 pts)}$:样例。 - $\text{Subtask 1 (11 pts)}$:集合包含 $K$ 个连续的正整数。 - $\text{Subtask 2 (7 pts)}$:$N$ 是偶数,集合的元素都在 $[1,N/2]$ 间。 - $\text{Subtask 3 (16 pts)}$:$N\le 4$。 - $\text{Subtask 4 (13 pts)}$:$N=14$,$K=2$。 - $\text{Subtask 5 (12 pts)}$:集合的元素都在 $[1,N-1]$ 间。 - $\text{Subtask 6 (41 pts)}$:无额外约束。