1532. Binary Search
来源:互联网 发布:java课程设计 编辑:程序博客网 时间:2024/06/05 10:05
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <math.h>using namespace std;bool isFind(int data, int level, int test){ int l =0, r = test, num = 0; bool find = false; while(l <= r) { int mid = (l+r)/2; num++; if(num > level) break; if(mid == data && num == level) { return true; } if(mid > data) r = mid-1; else l = mid+1; } return false;}int main(){ //freopen("in.txt","r", stdin); //freopen("out.txt","w", stdout); int data, level; int testNum = 1;int *aa = new int[100000];int bb[1000][2];bool ok = false; //while(cin >> data >> level) while(scanf("%d %d", &data, &level) != EOF) { if(ok) cout << endl; ok = true; double end = data * pow(2.0, level+1); int start = data+1; int aSize = 0; int *temp = aa; int num = 0; while(start <= end) { if(isFind(data, level,start)) { aa[aSize] = start+1; if(aa[aSize] == aa[aSize-1] +1){ bb[num][1] = aa[aSize]; } else { num++; bb[num][0] = aa[aSize]; bb[num][1] = aa[aSize]; } aSize++; } start++; } printf("%d\n", num); for(int i = 1; i<=num; i++) printf("%d %d\n", bb[i][0],bb[i][1]); } system("pause"); return 0;}