【小结】:
其实我做过CF原题,其实我也知道这个题目怎么做,但是!!!!我恨自己傻逼,真的没想到有n=2,k=3,这组特例,我一句话都不想说,我看了题解,加了一行代码就过了。我真的佩服自己傻逼。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 100; 5 ll a[N],sum[N]; 6 int main() 7 { 8 int T; 9 ll n,k ; 10 for(int i=1;i<=61;i++){ 11 a[i] = a[i-1]<<1 | 1 ; 12 sum[i] = sum[i-1] + a[i] ; 13 } 14 for( scanf("%d",&T) ; T ; T-- ) { 15 scanf("%lld%lld",&n,&k); 16 if( n==2 && k ==3 ){ 17 printf("No "); 18 continue; 19 } 20 if( n < 32 ){ 21 ll Maxz = (( 1ll << (2*n) )-1ll)/3ll; 22 if( k > Maxz ){ 23 printf("No ");continue; 24 } 25 } 26 for(ll i=61;i>=0;i--){ 27 if( k>=sum[i] ){ 28 printf("Yes %lld ",max(n-i,0ll)); 29 break; 30 } 31 } 32 } 33 return 0; 34 }