链接:登录—专业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代码
#includeusing 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<=x && temp<=y) { flag=1; printf("%lldn",temp); break; } } if(flag==0) { printf("-1n"); } } //system("pause"); return 0; }



