P1582-倒水
1 #include <bits/stdc++.h> 2 #define _for(i,a,b) for(int i = (a);i < b;i ++) 3 typedef long long ll; 4 using namespace std; 5 6 inline ll read() 7 { 8 ll ans = 0; 9 char ch = getchar(), last = ' '; 10 while(!isdigit(ch)) last = ch, ch = getchar(); 11 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar(); 12 if(last == '-') ans = -ans; 13 return ans; 14 } 15 inline void write(ll x) 16 { 17 if(x < 0) x = -x, putchar('-'); 18 if(x >= 10) write(x / 10); 19 putchar(x % 10 + '0'); 20 } 21 ll N,K; 22 int bitcount (ll n) 23 { 24 int count=0; 25 while (n) 26 { 27 count += n & 0x1u ; 28 n >>= 1 ; 29 } 30 return count ; 31 } 32 int main() 33 { 34 N = read(), K = read(); 35 ll rnt = 0; 36 while(1) 37 { 38 if(bitcount(N) <= K) 39 break; 40 rnt += N&(-N),N += N&(-N); 41 } 42 write(rnt); 43 return 0; 44 }