题目链接:uva 1554 - Binary Search
题目大意:按照题目中的二分函数,给出i和L,表示说在第i个位置,并且查找了L次,问说有多少个N满足,注意输出的时候按照区间的形式。
解题思路:暴力,从i+1到MAXN,每次模拟题目中的代码跑一遍即可,然后要注意上限问题,N最大为1e4,然后最后N=1e4的时候要注意一下。
#include#include const int N = 1e4+1; int x, c, v[N], l[N], r[N]; bool judge(int n) { int p = 0, q = n-1, cnt = 0; while (p <= q) { int mid = (p + q) / 2; cnt++; if (cnt > c) return false; if (mid == x) return cnt == c; if (x < mid) q = mid - 1; else p = mid + 1; } return false; } int main () { while (scanf("%d%d", &x, &c) == 2) { memset(v, 0, sizeof(v)); bool flag = false; int ans = 0; for (int i = x+1; i < N; i++) { if (judge(i)) { if (!flag) { l[ans] = i; flag = true; } } else { if (flag) { r[ans++] = i-1; flag = false; } } } if (flag) r[ans++] = N-1; printf("%d\n", ans); for (int i = 0; i < ans; i++) printf("%d %d\n", l[i], r[i]); } return 0; }