题目:传送门
思路:
(类似于贪心的算法 )在n中找出一个最大的2的次方数,接着在剩余部分接着找……,找(k-1)次。剩余部分看代码:
#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
template < typename T > void read(T &x)
{
int f = 1;x = 0;char c = getchar();
for (;!isdigit(c);c = getchar()) if (c == '-') f = -f;
for (; isdigit(c);c = getchar()) x = x * 10 + c - '0';
x *= f;
}
int main()
{
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
int n, k;
cin >> n >> k;
int t1 = k - 1;
for(int i = 1;i <= t1;i++)
{
long long s = 1;
while(s < n) s *= 2;
s /= 2;
n -= s;
}
long long s = 1;
while(s < n) s *= 2;
cout << s - n << endl;
return 0;
}