比赛场次 745
比赛名称 2026.4.4
比赛状态 已结束比赛成绩
开始时间 2026-04-04 08:00:00
结束时间 2026-04-04 13:00:00
开放分组 全部用户
组织者 HXF
注释介绍
题目名称 For the Champion
输入输出 robot.in/out
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试点数 5 交互式+评测插件
用户 结果 时间 内存 得分
GravatarRuyi AAAAA 0.014 s 3.67 MiB 100
Gravatar终焉折枝 AAAAA 0.016 s 3.63 MiB 100
GravatarChenBp AAAAA 0.016 s 3.66 MiB 100
Gravatar李金泽 AAAAA 0.016 s 3.71 MiB 100
Gravatar梦那边的美好ME AAAAA 0.017 s 3.66 MiB 100
GravatarLikableP AAAAA 0.018 s 3.75 MiB 100
Gravatar郑霁桓 WAAAA 0.015 s 3.68 MiB 80

1. For the Champion

★☆   输入文件:robot.in   输出文件:robot.out  
时间限制:1 s   内存限制:512 MiB

【题目背景】

这是一道交互题。

【题目描述】

有一台故障机器人,在二维平面,他的初始位置是 $(X,Y)$(具体坐标未知)。

平面上 $n$ 个二维锚点 $(x_i,y_i)$。每次你可以让机器人选择一个上下左右四个方向之一,朝这个方向走 $k$ 步。

每次移动后吗,交互库会返回当前位置机器人到曼哈顿距离最近的二维锚点的曼哈顿距离是多少。

具体的,每次移动后,假设机器人的位置在 $(X',Y')$,会返回:
$$\min_{i=1}^n\{|X'-x_i|+|Y'-y_i|\}$$

请找出他的初始坐标 $(X,Y)$。

【实现细节】

选手不需要,也不应该实现 main 函数。

选手需要确保提交的程序包含头文件 robot.h,即在程序开头加入以下代码:

#include "robot.h"

选手需要在提交的程序源文件 robot.cpp 中实现以下两个函数:

void init(int c, int t);

$c, t$ 分别表示测试点编号与测试数据组数。$c = 0$ 表示该测试点为样例。

对于每个测试点,该函数会在程序开始运行时被交互库调用恰好一次。

std::pair<int, int> robot(int n, std::vector<int> x, std::vector<int> y);

$n$ 表示锚点的个数。$x,y$ 是两个长度为 $n$ 的数组。其中 $(x_i,y_i)$ 表示第 $i$ 个锚点的位置。

该函数需要返回两个整数,表示故障机器人的初始位置。

对于每个测试点,该函数会被交互库调用恰好 $t$ 次。

选手可以通过调用以下函数进行一次操作:

long long move(int o, int k);

$o$ 表示这次移动选择的方向,$o=1/2/3/4$ 表示移动方向是上/下/左/右。$k$ 表示移动的距离。

选手需要保证 $1\le o\le 4,0\le k\le 10^9$。

该函数会返回一个整数,表示到距离最近的锚点的距离。

选手需要保证交互库每次调用 robot 时,调用该函数的次数不超过 $100$ 次。

注意:在任何情况下,最终测试时所用的交互库运行所需时间均不会超过 $0.1$ 秒,所用内存为固定大小,且均不超过 $64$ MiB。

【测试程序方式】

试题目录下的 grader.cpp 是交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。

选手可以在本题目录下使用如下命令编译得到可执行程序:

g++ grader.cpp robot.cpp -o robot -std=gnu++14 -O2 -static

【输入格式】

对于编译得到的可执行程序:

可执行文件将从标准输入读入以下格式的数据:

输入的第一行包含两个非负整数 $c, t$,分别表示测试点编号和测试数据组数。

接下来依次为每组测试数据,对于每组测试数据:

第一行包含一个正整数 $n$,表示排列的长度。

接下来的 $n$ 行,每行两个非负整数 $x_i,y_i$,表示锚点的位置。

最后两个整数 $X,Y$ 表示故障机器人的初始下标。

【输出格式】

可执行文件将输出以下格式的数据至标准输出:

对于每组测试数据:

第一行包含一个字符串,表示测试的结果。其中,

Correct 表示选手返回的结果正确;

Wrong answer 表示选手返回的结果错误;

Invalid operation 表示选手对 move 函数的调用不合法。

若结果为 Correct,则第二行包含一个非负整数,表示选手在所有测试数据中调用 move 函数的次数的最大值。

【样例输入】

0 2
1
0 0
100 99
4
1 1
2 2
3 3
-1 -1
-1 0

【样例输出】

Correct.
3

【样例说明】

交互过程不唯一。

【数据规模与约定】

本题共有五个测试点,对于所有测试数据,均有:

$t = 10,1 \le n \le 100$;

对于所有 $1 \le i \le n$,均有 $-10^9 \le x_i,y_i,X,Y \le 10^9$。

保证第一个测试点均满足 $n=1$。

【评分方式】

注意:选手不应当通过非法方式获取交互库的内部信息,如直接与标准输入、输出流进行交互。

本题首先会受到和传统题相同的限制,例如编译错误会导致整道题目得 $0$ 分,运行时错误、超过时间限制、超过空间限制等会导致相应测试点得 $0$ 分等。选手只能在程序中访问自己定义的变量以及交互库给出的变量,尝试访问其他地址空间将可能导致编译错误或运行错误。

每次调用 robot 函数时,若返回的坐标是不正确的,或 move 函数调用不合法,或 move 函数调用次数超过 $100$,则相应测试点得 $0$ 分。在上述条件基础上:

在测试点 $1 \sim 5$ 中,设 $m$ 表示每次调用 robot 函数时的询问次数的最大值,则程序将获得 $20 \cdot f(m)$ 分,

$$f(m)=\begin{cases}1 & (m \le  10) \\ 1 - \frac{m-10}{90} & (10<m\le 100)\end{cases}$$

附件

【来源】

CF2135B。