CF1840B的題解

Jerry_heng發表於2024-03-28

(一)

可以看成把一個數用二進位制表示。

如果 \(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;
}