#ijpcsubmission. [ijpc_submission]提出 (Submission)
[ijpc_submission]提出 (Submission)
小課題 3 (50 分)
给定一个整数 T,满足 0 ≤ T ≤ M,具体的值不知道。需要通过反复提问来确定 T 的值。
- 使用最少的提问次数来确定 T 的值。
- 如果连续 N 次的回答都是 "Yes",则不能再继续提问。
实现过程中可以使用带有以下参数的函数 getT(N, M):
- N:允许提问 "Yes" 的次数。
- M:T 的上限。
getT(N, M) 函数中可以重复调用 compare(X)。compare(X) 的规则如下:
- X:需要与 T 进行比较的整数,必须满足 0 ≤ X ≤ M。
- 返回值是一个整数,表示对于问题的回答是 "Yes"(即 X ≥ T 成立)还是 "No"(即 X < T 成立),分别为 1 和 0。
getT(N, M) 在反复提问的过程中需要确定隐藏的 T 的值,并将该 T 的值作为返回值返回。但如果在调用 compare(X) 时连续 N 次得到的返回值为 1,则之后不能再继续调用 compare(X)。
例子
例1
考虑 N = 1,M = 4 的情况。
在这种情况下,可以通过以下战略来确定 T 的值。假设调用 compare 的参数和返回值如下:
参数
返回值
compare(1)
0
compare(2)
0
compare(3)
1
根据 2 < T 和 3 ≥ T,可以确定 T = 3。因此,getT 函数应该返回 3。
例2
考虑 N = 2,M = 8 的情况。
在这种情况下,可以通过以下战略来确定 T 的值。假设调用 compare 的参数和返回值如下:
参数
返回值
compare(4)
1
compare(1)
0
compare(2)
0
compare(3)
1
根据 2 < T 和 3 ≥ T,可以确定 T = 3。因此,getT 函数应该返回 3。
小任务
小任务 1 (25 分)
- N = 1
- 1 ≤ M ≤ 100 000
- getT(N, M) 可以反复调用 compare(X)。
小任务 2 (25 分)
- N = 2
- 1 ≤ M ≤