#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;
}
1532. Binary Search
最新推荐文章于 2022-04-10 19:33:02 发布