CF1840B的题解

(一)

可以看成把一个数用二进制表示。

如果 \(n\le2^k-1\) ,都可以取,输出 \(n+1\)

否则可以取 \(0\sim2^k-1\),输出 \(2^k\)

(二)

AC 代码。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,k;
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld%lld",&n,&k);
		int s=1;
		for(int i=1;i<=k;i++){
			s=s*2;
			if(s>n)break;
		}
		printf("%lld\n",min(n+1,s));
	}
	return 0;
}
posted @ 2024-03-28 08:20  Jerry_heng  阅读(8)  评论(0)    收藏  举报