211542026-01-12 13:57:22AsuraAutókódoláscpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base41/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/01ms316 KiB
3Részben helyes1/21ms512 KiB
4Elfogadva2/21ms512 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms560 KiB
8Elfogadva4/41ms316 KiB
9Elfogadva4/41ms316 KiB
10Elfogadva4/41ms316 KiB
11Elfogadva4/41ms316 KiB
12Elfogadva4/41ms316 KiB
13Hibás válasz0/41ms316 KiB
14Elfogadva4/41ms316 KiB
15Elfogadva4/41ms764 KiB
16Elfogadva4/41ms316 KiB
17Hibás válasz0/41ms316 KiB