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;}