题目背景
又到了一年一度的初赛寄,小 Y 开始刷往年的初赛题目练手,于是他点开了 CCF CSP-S 2021 第一轮 C++语言试题.pdf
,看到了一个令人印象深刻的题目:
想必各位都记得正确的答案,但是为了检验你是否是蒙的,小 Y 想让你教一教他该如何比较。
题目描述
你眼前有 $n$ 个数,编号为 $0$ 到 $n - 1$,保证所有数互不相同,但是你不知道它们的具体值,你只能派出小 $\gamma$ 去实地检验一下两个数 $x, y$ 哪个更大一些,为了防止小 $\gamma$ 过于劳累,你只能最多让小 $\gamma$ 去 $600$ 次,然后你要告诉小 Y 最小值和最大值的编号是什么。
实现细节
你需要实现一个程序,在给出数的个数 $n$,以及最多检验 $600$ 次的情况下,确定最小的数和最大的数。
你要实现以下函数:
void Solve(int n)
- 对于每个测试用例,该函数仅调用一次,参数 $n$ 是数的个数;
- 只允许通过调用
Compare
函数确定两个数的大小关系,只允许通过调用Answer
函数给出最小的数和最大的数的位置。
你可以调用如下函数:
int Compare(int X, int Y)
- 在比较两个数 $\texttt{X,Y}$ 时调用此函数,$\texttt{X,Y}$ 是大于等于 $0$ 且小于等于 $n-1$ 的整数,如果不满足以上条件,会被判为 Wrong Answer [1],程序结束;
- 如果数 $\texttt{X}$ 的大于数 $\texttt{Y}$,则函数返回 $1$,否则返回 $-1$;
- 如果
Compare
函数调用次数超过 $600$,会被判为 Wrong Answer [2],程序结束。
Solve
函数必须调用 Answer
函数来结束,如果 Solve
没有调用 Answer
,会被判为 Wrong Answer [3]。
int Answer(int X, int Y)
- 这个函数用来回答哪个数最小与那个数最大。参数 $\texttt{X}$ 表示数 $\texttt{X}$ 的最小,参数 $\texttt{Y}$ 表示数 $\texttt{Y}$ 最大。$\texttt{X,Y}$ 都大于等于 $0$ 且小于等于 $n-1$,如果不满足条件会被判为 Wrong Answer [4];
- 可以保证,与调用
Compare
的结果一致的答案是唯一的,如果 $\texttt{X,Y}$ 与答案不一致,则会被判为 Wrong Answer [5],一致则会被判为 Accepted; - 调用此函数后,程序结束。
注意事项
在评分时,只要你的回答与调用 Compare
的结果不一致,都会被判为 Wrong Answer [5]。
在评分时,一些测试点可能会根据之前 Compare
的调用情况修改返回值,但是 Compare
的返回值与之前 Compare
的调用结果不矛盾。
编译与运行方法
「下发文件」中提供了 chusaimoni.h
、chusaimoni.cpp
和 grader.cpp
三个文件。你可以直接在 chusaimoni.cpp
的基础上进行修改,并请运行以下命令来编译:
g++ -O2 -o grader grader.cpp chusaimoni.cpp
当命令成功时,会产生一个可执行文件 grader
。
如果你使用的是 windows
,那么将 grader
替换为 grader.exe
即可。
注意实际评测时的程序与下发的样例评测程序并不相同。
样例评测程序输入格式
样例评测程序将从标准输入读入以下数据:
- 第一行两个整数 $n,T$,用一个空格隔开。$n$ 表示数的个数,评测程序只会处理 $T=1$ 的数据;
- 接下来 $n$ 行,第 $i+1$ 行表示第 $i$ 个数为 $a_i$。
样例评测程序输出格式
样例评测程序将向标准输出输出以下信息。
- 判为正确时,输出
Accepted
; - 运行过程中被判为错误时,以
Wrong Answer [x]
的格式报告并退出。
程序执行过程中违反了多种限制时,只会报告其中的一种。
注意,如果样例中 $A_X=0,A_Y=n-1$,调用了 Answer(X, Y)
,即使应当是 Wrong Answer [5] 的情况,测评程序也会判定 Accepted。请注意,下发的 grader
与实际测评时使用的不同。
样例测评程序输入
3 1
1
2
0
样例交互
调用函数 | 返回值 |
---|---|
Compare(0, 1) |
-1 |
Compare(0, 2) |
1 |
Answer(2, 1) |
测评程序结束 |
数据范围
对于全部数据,$1\le n\le 400$。
详细子任务分数与附加限制见下表。
Subtask | 附加限制 | 分数 |
---|---|---|
$1$ | $n\le 30$ | $20$ |
$2$ | $n\le 300$ | $30$ |
$3$ | 无附加限制 | $50$ |
- 时间限制:1s
- 空间限制:512MB
- 下发文件