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

    ID: 15489 远端评测题 3000ms 2048MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>交互题Special Judge容斥原理2026KTSC(韩国)

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

题目背景

提交注意事项:

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

题目描述

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

给定正整数 NN

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

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

询问

给定 Y{0,1,,N1}Y\subseteq \{0,1,\ldots, N-1\} 满足 YN2+1|Y|\le \lceil \frac{N}{2} \rceil + 1

交互库回答 f(Y)={SXSY}f(Y)=|\{S\in X \mid S \subseteq Y \}|

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

实现细节

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

你应当实现以下的函数:

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

你可以调用以下的函数:

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

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

输入格式

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

  • 11 行:NN
  • 22 行:K(=X)K (= |X|)
  • 对于每个 0i<K0 \le i < K
    • 3+i3 + i 行:LL a0a_0 a1a_1 ... aL1a_{L-1}
      • 2L32 \le L \le 3
      • 0ajN10 \le a_j \le N - 1
      • a0,a1,,aL1a_0, a_1, \ldots, a_{L-1} 各不相同。
      • {a0,a1,,aL1}\{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

提示

数据范围

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

子任务

编号 得分 NN\le 特殊性质
11 1111 500500 AB\text{AB}
22 3232 A\text{A}
33 2525 10001\, 000 B\text{B}
44 3232
  • 特殊性质 A\text{A}:对于任意两个不同的 Si,SjXS_i,S_j\in XSiSj=S_i\cap S_j=\varnothing
  • 特殊性质 B\text{B}:对于任意 SXS\in XS=2|S|=2

计分方式

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

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

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

样例

N=6N = 6X={{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) 的返回值来提交答案。