#P14440. [JOISC 2013] 山岳救援队 / Mountain Rescue Team
[JOISC 2013] 山岳救援队 / Mountain Rescue Team
题目背景
请使用不低于 C++17 的语言标准提交,并且在程序开头加入函数定义:
void Rescue(int R, int C, int RS, int CS, int X);
int Measure(int RM, int CM);
注意,不应引入外部头文件。
题目描述
IOI 国政府因 IOI 山频发遇难事故,专门成立了 IOI 山山岳救援队。成立数日后某天,救援队接到一起遇难事故通报。据通报称,遇难者目前停留在高度为 的位置。
IOI 山可表示为 行 列的网格,每个网格有确定的高度值。从上数第 行、从左数第 列的网格记作 。已知山形满足以下条件:
- 不存在两个不同网格具有相同高度。
- 每个网格的高度均为 到 之间的整数。
- 网格 为山顶,即高度最大的网格为 。
- 定义两个网格 与 的距离为 。对于任意两个相邻网格(相邻指两网格有公共边),距离山顶较远的网格高度较低。
山岳救援队成立不久,对 IOI 山的勘测尚未完成,包括山顶在内的各网格高度均未知。使用专业测量仪器可查询指定单个网格的高度,但每次查询需耗费固定时间。救援队希望通过该仪器定位遇难者所在的高度为 的网格位置,且希望将仪器使用次数控制在 次以内。
任务
给定表示 IOI 山网格大小的整数 、山顶位置 以及遇难者所在网格高度 ,编写程序在最多使用 次测量仪器的情况下,定位遇难者所在网格的位置。
实现细节
你必须编写一个程序,实现使用测量仪器的方法。程序必须实现以下函数:
void Rescue(int R, int C, int RS, int CS, int X)
此函数在每个测试用例中仅被调用一次。参数 , 分别表示山体网格的行数 和列数 。参数 , 分别表示山顶的行号 和列号 。参数 表示遇难者所在网格的高度 。
此外,程序中可调用以下函数:
int Measure(int RM, int CM)
此函数在需要使用测量仪器时调用。参数 , 分别表示待测量高度的网格行号 和列号 ,需满足 , 。此函数返回值为网格 的高度,为 到 之间的整数。
若使用不满足 , 的参数调用此函数,将被判为 Wrong Answer [1],程序执行终止。
若此函数被调用满 次后再次调用,将被判为 Wrong Answer [2],程序执行终止。
void Pinpoint(int RP, int CP)
此函数在确定遇难者所在网格位置时调用,仅可调用一次。参数 , 分别表示已确定的遇难者所在网格行号 和列号 ,需满足 , 。此函数无返回值。
若使用不满足 , 的参数调用此函数,将被判为 Wrong Answer [3],程序执行终止。
程序调用此函数时,若网格 的高度等于 则判为 正确,否则判为 Wrong Answer [4],程序执行终止。
若 Rescue 函数在未调用此函数的情况下结束,将被判为 Wrong Answer [5],程序执行终止。
输入格式
评分程序的示例从标准输入读取以下输入:
- 第 行包含以空格分隔的整数 ,表示山体网格的行数为 ,列数为 ,山顶为网格 ,遇难者所在网格的高度为 。
- 后续 行描述山体高度信息。其中第 行()包含 个整数,其中第 个()整数表示网格 的高度。
输出格式
若程序正常结束运行,评分程序示例将向标准输出输出一行信息:
- 若答案正确,输出 "Accepted"。(实际输出不包含引号,下同。)
- 若答案错误,根据“实现细节”章节中列出的错误编号输出,例如 "Wrong Answer[1]"。此外,对于 Wrong Answer [4],将输出正确遇难者位置 以及调用 Pinpoint 例程时参数指定的网格 的信息,格式如 "Wrong Answer[4] : (RX, CX) = (3, 2), (RP, CP) = (4, 1)"。
提示
限制
所有输入数据满足以下条件:
子任务
子任务 1 [20 分]
满足以下条件:
子任务 2 [80 分]
无额外限制
翻译由 DeepSeek V3 完成
京公网安备 11011102002149号