#P14440. [JOISC 2013] 山岳救援队 / Mountain Rescue Team

    ID: 14370 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2013交互题Special JudgeJOISC/JOIST(日本)

[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 山山岳救援队。成立数日后某天,救援队接到一起遇难事故通报。据通报称,遇难者目前停留在高度为 XX 的位置。

IOI 山可表示为 RRCC 列的网格,每个网格有确定的高度值。从上数第 rr 行、从左数第 cc 列的网格记作 (r,c)(r,c)。已知山形满足以下条件:

  • 不存在两个不同网格具有相同高度。
  • 每个网格的高度均为 1110000000001\,000\,000\,000 之间的整数。
  • 网格 (Rs,Cs)(R_s, C_s) 为山顶,即高度最大的网格为 (Rs,Cs)(R_s, C_s)
  • 定义两个网格 (r1,c1)(r_1,c_1)(r2,c2)(r_2,c_2) 的距离为 r1r2+c1c2|r_1 - r_2| + |c_1 - c_2|。对于任意两个相邻网格(相邻指两网格有公共边),距离山顶较远的网格高度较低。

山岳救援队成立不久,对 IOI 山的勘测尚未完成,包括山顶在内的各网格高度均未知。使用专业测量仪器可查询指定单个网格的高度,但每次查询需耗费固定时间。救援队希望通过该仪器定位遇难者所在的高度为 XX 的网格位置,且希望将仪器使用次数控制在 10001\,000 次以内。

任务

给定表示 IOI 山网格大小的整数 R,CR, C、山顶位置 Rs,CsR_s, C_s 以及遇难者所在网格高度 XX,编写程序在最多使用 10001\,000 次测量仪器的情况下,定位遇难者所在网格的位置。

实现细节

你必须编写一个程序,实现使用测量仪器的方法。程序必须实现以下函数:

  • void Rescue(int R, int C, int RS, int CS, int X)

此函数在每个测试用例中仅被调用一次。参数 RR, CC 分别表示山体网格的行数 RR 和列数 CC。参数 RSRS, CSCS 分别表示山顶的行号 RSRS 和列号 CSCS。参数 XX 表示遇难者所在网格的高度 XX

此外,程序中可调用以下函数:

  • int Measure(int RM, int CM)

此函数在需要使用测量仪器时调用。参数 RMRM, CMCM 分别表示待测量高度的网格行号 RMR_M 和列号 CMC_M,需满足 1RMR1 \leq R_M \leq R, 1CMC1 \leq C_M \leq C。此函数返回值为网格 (RM,CM)(R_M, C_M) 的高度,为 1110000000001\,000\,000\,000 之间的整数。

若使用不满足 1RMR1 \leq R_M \leq R, 1CMC1 \leq C_M \leq C 的参数调用此函数,将被判为 Wrong Answer [1],程序执行终止。

若此函数被调用满 10001\,000 次后再次调用,将被判为 Wrong Answer [2],程序执行终止。

  • void Pinpoint(int RP, int CP)

此函数在确定遇难者所在网格位置时调用,仅可调用一次。参数 RPRP, CPCP 分别表示已确定的遇难者所在网格行号 RPR_P 和列号 CPC_P,需满足 1RPR1 \leq R_P \leq R, 1CPC1 \leq C_P \leq C。此函数无返回值。

若使用不满足 1RPR1 \leq R_P \leq R, 1CPC1 \leq C_P \leq C 的参数调用此函数,将被判为 Wrong Answer [3],程序执行终止。

程序调用此函数时,若网格 (RP,CP)(R_P, C_P) 的高度等于 XX 则判为 正确,否则判为 Wrong Answer [4],程序执行终止。

若 Rescue 函数在未调用此函数的情况下结束,将被判为 Wrong Answer [5],程序执行终止。

输入格式

评分程序的示例从标准输入读取以下输入:

  • 11 行包含以空格分隔的整数 R,C,RS,CS,XR, C, R_S, C_S, X,表示山体网格的行数为 RR,列数为 CC,山顶为网格 (RS,CS)(R_S, C_S),遇难者所在网格的高度为 XX
  • 后续 RR 行描述山体高度信息。其中第 ii 行(1iR1 \leq i \leq R)包含 CC 个整数,其中第 jj 个(1jC1 \leq j \leq C)整数表示网格 (i,j)(i, j) 的高度。

输出格式

若程序正常结束运行,评分程序示例将向标准输出输出一行信息:

  • 若答案正确,输出 "Accepted"。(实际输出不包含引号,下同。)
  • 若答案错误,根据“实现细节”章节中列出的错误编号输出,例如 "Wrong Answer[1]"。此外,对于 Wrong Answer [4],将输出正确遇难者位置 (RX,CX)(R_X, C_X) 以及调用 Pinpoint 例程时参数指定的网格 (RP,CP)(R_P, C_P) 的信息,格式如 "Wrong Answer[4] : (RX, CX) = (3, 2), (RP, CP) = (4, 1)"。


提示

限制

所有输入数据满足以下条件:

  • 1R2001 \leq R \leq 200
  • 1C2001 \leq C \leq 200
  • 1RSR1 \leq R_S \leq R
  • 1CSC1 \leq C_S \leq C
  • 1X10000000001 \leq X \leq 1\,000\,000\,000

子任务

子任务 1 [20 分]

满足以下条件:

  • R50R \leq 50
  • C50C \leq 50

子任务 2 [80 分]

无额外限制

翻译由 DeepSeek V3 完成