#P15058. [2026省选联测]删除数据

    ID: 14274 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 6 上传者: 标签>CF2000动态规划分治搜索记忆化搜索

[2026省选联测]删除数据

这是一道交互题。

题目描述

flow 的数据库遭到了 rewo 的攻击!

flow 原本有一个 0n10\sim n-1 的排列 pp,rewo 又在这之中插入了一个 0n10\sim n-1 的数 xx 构成了一个长度为 n+1n+1 的数列 pp'

由于这个数列比较长,flow 没有办法直接看出来 xx 是什么,但是他为你提供了一个接口函数,请你在 2000020000 次调用接口函数内解决这个问题。

实现细节

你不需要,也不应该实现主函数。

你需要导入头文件 delete.h

你需要实现以下函数:

int finderr(int n)

该函数恰好被调用一次。

该函数应该返回一个整数,即 xx 的值。

在该函数中,你可以调用以下函数:

bool check(std::vector<int> vec, int y)
  • vec: 一个长度若干的数组(设长度为 mm)包含 mm 个两两不同的 [0,n][0,n] 中的自然数。
  • y: 一个 [0,n1][0,n-1] 的自然数。
  • 该函数返回一个 bool 值,表示是否存在一个自然数 i[0,m1]i\in[0,m-1],满足 p[vec[i]]=yp'[vec[i]]=y
  • 该函数可以被调用至多 2000020000 次。

下发文件中包含一个实现示例 delete.cpp,一个样例交互库 delete.h

输入格式

你不需要,也不应该从标准输入中读入任何东西。

评测文件的输入方式为:

第一行输入一个整数 nn

第二行输入 n+1n+1 个整数,表示 p0,p1,,pnp_0,p_1,\dots,p_n

输出格式

你不需要,也不应该向标准输出中输出任何东西。

评测文件的输出方式为:

一行输出一个正整数 xx,表示答案。

说明/提示

本题使用子任务(Subtask)计分

对于所有测试数据,保证:1n7661\le n\le 766

子任务编号 nn\le 特殊性质 分值
11 4040 A 1010
22 120120 ^
33 200200
44 766766 1515
55 700700 2020
66 766766 ^ 3535

特殊性质 A:保证 pp' 生成方式为:先随机生成 p,xp,x,再在 pp 的随机位置插入 xx

评分方式

对于一个测试点:

若你 finderr 函数的返回值不为 xx,则得 00 分。

否则记 QQ 为你的询问次数,则你的得分 scorescore 按以下方式计算:

$$f(Q)=\begin{cases} 10000 &, 0\le Q\le2000\\9000e^{\frac{1}{4000}\times(2001-x)} &, 2001\le Q \le 20000\\ 0 &, Q>20000\end{cases}$$

score=该子任务分值×f(Q)10000score=\text{该子任务分值}\times\frac{f(Q)}{10000}

一个子任务的得分为其中所有测试点中的最小值。

f(Q)f(Q) 的第二部分图像: