1 条题解
-
0
文字教学
这道题用二分查找就能高效解决,因为每次询问能把范围缩小一半,询问次数只有 次(远小于题目给的 限制):
- 初始猜数范围是左边界
l=1,右边界r=n。 - 每次取中间值
mid,调用Seniorious(mid)问结果:- 若返回
0,说明mid就是要找的 ,直接返回; - 若返回
1,说明 比mid小,把右边界调到mid-1; - 若返回
-1,说明 比mid大,把左边界调到mid+1。
- 若返回
代码
#include <bits/stdc++.h> using namespace std; extern "C" int Seniorious(int); extern "C" int Chtholly(int n, int c) { int l = 1, r = n; while (l <= r) { int mid = (l + r) / 2; int res = Seniorious(mid); if (res == 0) return mid; else if (res == 1) r = mid - 1; else l = mid + 1; } return -1; } - 初始猜数范围是左边界
- 1
信息
- ID
- 5393
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
京公网安备 11011102002149号