211542026-01-12 13:57:22AsuraAutókódoláscpp17Wrong answer 41/501ms764 KiB
#include <bits/stdc++.h>
using namespace std;

int nextSamePopcount(int x) {
    int c = x & -x;
    int r = x + c;
    return (((r ^ x) >> 2) / c) | r;
}

int prevSamePopcount(int x) {
    int temp = x;
    int c1 = 0, c0 = 0;

    while ((temp & 1) == 1) {
        c1++;
        temp >>= 1;
    }
    while (((temp & 1) == 0) && temp != 0) {
        c0++;
        temp >>= 1;
    }

    int p = c0 + c1;
    if (p == 0) return -1;

    x &= (~0 << (p + 1));
    int mask = (1 << (c1 + 1)) - 1;
    x |= mask << (c0 - 1);

    return x;
}

int main() {
    int n;
    cin >> n;

    cout << prevSamePopcount(n) << endl;
    cout << nextSamePopcount(n);

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base41/50
1Accepted0/01ms316 KiB
2Wrong answer0/01ms316 KiB
3Partially correct1/21ms512 KiB
4Accepted2/21ms512 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms560 KiB
8Accepted4/41ms316 KiB
9Accepted4/41ms316 KiB
10Accepted4/41ms316 KiB
11Accepted4/41ms316 KiB
12Accepted4/41ms316 KiB
13Wrong answer0/41ms316 KiB
14Accepted4/41ms316 KiB
15Accepted4/41ms764 KiB
16Accepted4/41ms316 KiB
17Wrong answer0/41ms316 KiB