#P15586. [KTSC 2026] 五万酱汁 / 50,000 Sauces

    ID: 17467 远端评测题 3000ms 2048MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>交互题Special Judge2026KTSC(韩国)

[KTSC 2026] 五万酱汁 / 50,000 Sauces

背景

提交注意事项:

  1. 不要引入头文件。
  2. 在文件头加入
    #include <vector>
    int query(std::vector<int>);
    
  3. 使用 C++ 20/23\texttt{C++\,\red{20/23}} 提交。

题目描述

这是一道交互题。本题中,交互库是非自适应的。

给定正整数 NN。

有一个隐藏的集族 XX。XX 的每个元素 SS 都是 {0,1,…,N−1}\{0,1,\ldots,N-1\} 的子集。这里,∣S∣|S| 是 22 或 33。注意,根据定义,集合不能包含重复元素。

你可以进行若干次以下的询问,目标是找出 ∣X∣|X|:

询问

给定 Y⊆{0,1,…,N−1}Y\subseteq \{0,1,\ldots, N-1\} 满足 ∣Y∣≤⌈N2⌉+1|Y|\le \lceil \frac{N}{2} \rceil + 1。

交互库回答 f(Y)=∣{S∈X∣S⊆Y}∣f(Y)=|\{S\in X \mid S \subseteq Y \}|。

用尽量少的询问次数找出 ∣X∣|X|。

实现细节

这是一道函数式交互题。你不必,也不应实现 main 函数。

你应当实现以下的函数:

int solve(int N)
  • 返回 ∣X∣|X|。
  • 该函数被调用恰好一次。

你可以调用以下的函数:

int query(vector<int> Y)
  • YY 中的元素必须两两不同。
  • 必须有 0≤Y[i]≤N−10\le Y[i]\le N-1。
  • 必须有 ∣Y∣≤⌈N2⌉+1|Y|\le \lceil \frac{N}{2} \rceil + 1。
  • 该函数返回 f(Y)=∣{S∈X∣S⊆Y}∣f(Y)=|\{S\in X \mid S \subseteq Y \}|。
  • 每个测试点中,该函数最多可调用 3 0003\,000 次。

你的源代码中不应调用任何输入/输出函数。

输入格式

示例评测程序的输入格式如下:

  • 第 11 行:NN
  • 第 22 行:K(=∣X∣)K (= |X|)
  • 对于每个 0≤i<K0 \le i < K:
    • 第 3+i3 + i 行:LL a0a_0 a1a_1 ... aL−1a_{L-1}
      • 2≤L≤32 \le L \le 3
      • 0≤aj≤N−10 \le a_j \le N - 1
      • a0,a1,…,aL−1a_0, a_1, \ldots, a_{L-1} 各不相同。
      • {a0,a1,…,aL−1}\{a_0, a_1, \ldots, a_{L-1}\} 是集合 XX 的一个元素。

输出格式

示例评测程序按以下格式输出你的代码在 solve 函数中返回的值以及调用 query 的次数:

  • 第 11 行:solve 函数返回的值 xx
  • 第 22 行:调用 query 的次数 QQ
6
2
2 0 1
3 2 3 4

2
3

提示

数据范围

  • 6≤N≤1 0006\le N\le 1\, 000;
  • 1≤∣X∣≤50 0001\le |X|\le 50\, 000;
  • 对于任意 S∈XS\in X,∣S∣∈{2,3}|S|\in \{2,3\};
  • 交互库是非自适应的。换言之,XX 在调用 solve 前已固定。

子任务

编号 得分 N≤N\le 特殊性质
11 1111 500500 AB\text{AB}
22 3232 A\text{A}
33 2525 1 0001\, 000 B\text{B}
44 3232
  • 特殊性质 A\text{A}:对于任意两个不同的 Si,Sj∈XS_i,S_j\in X,Si∩Sj=∅S_i\cap S_j=\varnothing;
  • 特殊性质 B\text{B}:对于任意 S∈XS\in X,∣S∣=2|S|=2。

计分方式

在每个子任务中,若有回答 ∣X∣|X| 错误的情况,该子任务得 00 分。

否则,令 QQ 为该子任务各测试点中调用 query 函数次数的最大值,按照如下规则计算得分:

  • 对于子任务 1,21,2,若 Q≤3 000Q\le 3\, 000,得满分。
  • 对于子任务 3,43,4:
    • 若 41<Q≤3 00041\lt Q\le 3\, 000,得 (0.5+412Q)\displaystyle (0.5 + \frac{41}{2Q}) 倍子任务满分;
    • 若 Q≤41Q\le 41,得满分。

样例

N=6N = 6,X={{0,1},{2,3,4}}X = \{\{0,1\}, \{2,3,4\}\}。∣X∣=2|X| = 2。

询问集合的最大大小为 ⌊6/2⌋+1=4\lfloor 6/2 \rfloor + 1 = 4。

评测程序最初调用以下函数:

solve(6)

选手的代码可能会进行如下交互:

query(0, 1, 2)
query(2, 3, 4)
query(0, 2, 3, 5)
  • 由于 {0,1}⊆{0,1,2}\{0, 1\} \subseteq \{0, 1, 2\} 且 {2,3,4}⊈{0,1,2}\{2, 3, 4\} \not\subseteq \{0, 1, 2\},query(0, 1, 2) 返回 11。
  • 由于 {0,1}⊈{2,3,4}\{0, 1\} \not\subseteq \{2, 3, 4\} 且 {2,3,4}⊆{2,3,4}\{2, 3, 4\} \subseteq \{2, 3, 4\},query(2, 3, 4) 返回 11。
  • 由于 {0,2,3,5}\{0, 2, 3, 5\} 不包含 XX 的任何元素,query(0, 2, 3, 5) 返回 00。

选手的代码通过将 22 作为 solve(6) 的返回值来提交答案。