#P16387. [IATI 2024] Ones

    ID: 18455 远端评测题 30000ms 256MiB 尝试: 0 已通过: 0 显示难度暂无评定 上传者: 标签>2024交互题Special JudgeIATI(保加利亚/东欧)

[IATI 2024] Ones

题目描述

Radko 又想打听 Marti 的序列 p1,p2,…,pnp_1,p_2,\dots,p_n 了。这一次,Marti 决定更友善一些,直接告诉他这个序列由 nn 个 00 和 11 组成,并且其中恰好有 kk 个 11。这一次,他只会回答以下问题:

  • “在 pl,pl+1,…,prp_l,p_{l+1},…,p_r 中是否存在一个 11?”

遗憾的是,Radko 仍然忙得不可开交,于是再次将任务外包给了你。你的程序在每个测试点中会接受 ntestsn_{tests} 个子测试的检验,而你的得分将根据你为找出相应序列所提出的问题总数来计算。

实现细节

你需要实现的函数 guessOnes\verb|guessOnes| 具有如下原型:

std::vector<int> guessOnes(int n, int k);

该函数在每个测试点中会被调用 ntestsn_{tests} 次,并接收参数:序列长度 nn 以及 11 的个数 kk。函数应返回一个包含 kk 个数的向量——以升序排列的各个 11 所在的位置。

裁判函数 hasOneshasOnes 具有如下原型:

bool hasOnes(int l, int r);

你的程序可以随意调用该函数任意多次。它接收两个下标 ll 和 rr(取值范围为 11 到 nn),表示你想要询问的区间。该函数返回在 pl,pl+1,…,prp_l,p_{l+1},…,p_r 中是否存在 11。它的时间复杂度为 O(1)O(1)。

你的程序必须实现函数 guessOnes\verb|guessOnes|,但不应包含 main\verb|main| 函数。同时,它不得从标准输入读取数据或向标准输出打印内容。你的程序还必须通过预处理器指令包含头文件 ones.h\verb|ones.h|:#include "ones.h"\verb|#include "ones.h"|

只要遵守这些条件,你的程序可以包含任意辅助函数、变量、常量等。

本地测试

系统提供了文件 Lgrader.cpp\verb|Lgrader.cpp|,你可以凭借它在本地测试你的程序。为此,你需要在你的代码中添加 #include "Lgrader.cpp"\verb|#include "Lgrader.cpp"|。

标准输入的第一行包含数字 nn、kk 和 ntestsn_{tests}。

接下来的 ntestsn_{tests} 行,每行包含 kk 个数字——即各个 11 的位置。如果你的程序成功为每个子测试找到了正确的序列,它将会输出你为所有序列所提出的问题总数。



提示

数据范围

  • 每个序列均为均匀随机生成。
  • n=100 000n = 100\,000
  • ntests=100n_{tests} = 100

子任务与评分

你在一个子任务上获得的分数比例取决于你在一个子测试中提出的问题总数 qparticipantq_{participant},以及该子任务的常数 qauthorq_{author}。

若 qparticipant≤qauthorq_{participant} \leq q_{author},则 score=1score = 1

否则 $score = 1 - \sqrt[4]{1 - \frac{q_{author}}{q_{participant}}}$

子任务 分数 kk qauthorq_{author}
11 1010 1010 1448014480
22 2020 2720127201
33 5050 6190861908
44 100100 114144114144
55 200200 208697208697
66 500500 455937455937
77 1 0001\,000 811792811792
88 2 0002\,000 14223961422396
99 5 0005\,000 28796752879675
1010 10 00010\,000 47237794723779

翻译由 DeepSeek V4 Pro 完成