2 solutions
-
3
long long
#include <bits/stdc++.h> using namespace std; //令x最小 //贪心 long long q, n, ans = 0; int main() { cin >> n >> q; for(int i = 1; i <= q; i++) { long long k; cin >> k; //((long long) 1) << k 表示将 ((long long) 1) 的二进制表示向左移动k位所得的值 long long x = (((long long) 1) << (k-1)); // cout << x << endl; if (n & x) { continue;//由于n的第k位(从右往左数)本身就是1,所以无需改变 } //否则 long long c = n % x; // cout << c << endl; ans += x - c; // cout << ans << endl; n += x - c;//每次操作都会让 n 变为 n+x,会影响后续操作 // cout << n << endl; } cout << ans; return 0; }
没用long long只有70分
- 1
Information
- ID
- 1146
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 8
- Tags
- # Submissions
- 78
- Accepted
- 13
- Uploaded By