链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
可以给我点两杯嘛,我和哥哥一人一杯。
给你两个整数 x和 y,让你求一个整数 z,满足 x≤z≤y 且 z 是 2 的方幂。
输入描述:
第一行输入一个正整数 T(1≤T≤10^5),表示数据组数。 接下来 T 行,每行两个整数 x,y(1≤x≤y≤10^9) 表示一组询问。
输出描述:
输出 T 行,每行一个整数表示答案,如果有多解输出任意一解均给分,如果无解输出 −1
示例1
输入
6 1000 2000 1000 4000 1000 4000 1000 8000 1000 8000 1000 8000
输出
1024 1024 2048 1024 2048 4096
说明
对于样例 #1,210=1024,211=2048,212=40962^{10}=1024,2^{11}=2048,2^{12}=4096210=1024,211=2048,212=4096
示例2
输入
6 800 1000 3000 4000 5000 6000 6000 7000 7000 8000 9000 10000
输出
-1 -1 -1 -1 -1 -1
说明
对于样例 #2,这些范围内很明显都没有 2 的方幂出现。
解题思路:
水题,枚举每种情况3e6的复杂度,不可能超时,直接枚举就行
一开始没过是算错了1e9的大小,1后面加9个零,总共十位,所以九位数即之前都可以
下面附上ac代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
long long x,y;
while(t--)
{
scanf("%lld %lld",&x,&y);
if(x>y) swap(x,y);
int flag=0;
for(int i=0;i<=29;i++)
{
long long temp=(1<<i);
if(temp>=x && temp<=y)
{
flag=1;
printf("%lld\n",temp);
break;
}
}
if(flag==0)
{
printf("-1\n");
}
}
//system("pause");
return 0;
}