cf1271E--数学、法律、および後半のサブセットを検索します

ねえ、法律は見えにくいです

/ * 
二部Yフィージビリティ決意、判定機能レーン:
    法則を見つけるには、に見出すことができる:
    yが奇数である
        Y:レイヤー0 
        第一層:2Y、2Y + 1 
        、第2の層の:4Y、4Y + 1,4y + 2,4y +3 
        第三層:8Y、8Y + 1,8y + 2,8y + 3,8y + 4,8y + 5,8y + 6,8y + 7 
            ... 
        、k番目の層:[2 ^ K * Y、 2 + K 2 * Y ^ ^ 1-K]。
    
    Yが偶数である
        レイヤ0:Y、Y + 1 
        第一層の:2Y、2Y + 1,2y + 2,2y + 3 
        4Y、4Y + 1:第2の層の、4Y + 2,4y + 3,4y + 4,4y + 5,4y + 6,4y + 7 
        層:8Y、8Y + 1,8y + 2,8y + 3,8y + 4,8y + 5、 + 6,8y + 7,8y + 8Y 8,8y + 9,8y + 10,8y 11,8y + + + 13,8y 12,8y 14,8y + 15 + 
            ... 
        k番目の層:[2 ^ K * Y、2 ^ K * Y + 2 ^(K + 1)-1] 
    
、その後、統計を見て
特別な注意二つ別々で割った奇数と偶数の2例の特別なノートのための出発点である

* / 
の#include <ビット/ STDC ++。H>
 使用 名前空間ははstd;
#defineっ長い長

LL N、K。

パウ(-1,11,11- b)は{LL 
    LL RES = 1 一方、(B){
         場合(bは%2)RES = RES * 
        B >> = 1 ; * = ; 
    } 
    戻りRES。
} 
(LL Y){判断ちゃう
    LL和 = 0、K = 0 もし(Y%2 == 0){ // 偶数
        ながら(POW(2、k)が* Y +パウ(2、K +1) - 1 <= N){ 
            合計 + =パウ(2、K + 1 )。
            K ++ ; 
        }  + = MAX(0LL、N-パウ(2、k)が* Y + 1 )。
    } 
    {
         一方(POW(2、k)が* Y +パウ(2、k)を- 1 <= N){ 
            合計 + =パウ(2 、k)は、
            K ++ ; 
        }  + = MAX(0LL、N-パウ(2、k)が* Y + 1)。
    } 
    であれば(和> = K)リターン 1 リターン 0 ; 
} 

int型のmain(){ 
    CIN >> N >> K。
    LL L = 0、R =(N- 1)/ 2、中間、ANS1 = 1 一方、(L <= R){ 
        ミッド = L + R >> 1 もし(裁判官(ミッド* 2 + 1 ))
            ANS1 =ミッド* 2 + 1、L =ミッド+ 1 ;
        他の R =半ば1; 
    } 
    
    L = 1、R = N / 2 
    LL ANS2 = 1 一方、(L <= R){ 
        ミッド = L + R >> 1 もし(裁判官(ミッド* 2 ))
            ANS2 =ミッド* 2、L =ミッド+ 1 ;
        他の R =半ば1 
    } 
    COUT << MAX(ANS1、ANS2)<< ' \ n ' 
}

おすすめ

転載: www.cnblogs.com/zsben991126/p/12115002.html