【规律】我有一个梦想

 

 

 

 

 

 

【小结】:

  其实我做过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\n");
18             continue;
19         }
20         if( n < 32 ){
21             ll Maxz = (( 1ll << (2*n) )-1ll)/3ll;
22             if( k > Maxz ){
23                 printf("No\n");continue;
24             }
25         }
26         for(ll i=61;i>=0;i--){
27             if( k>=sum[i] ){
28                 printf("Yes %lld\n",max(n-i,0ll));
29                 break;
30             }
31         }
32     }
33     return 0;
34 }
View Code

 

posted @ 2019-07-30 21:04  Osea  阅读(195)  评论(0编辑  收藏  举报