214472026-01-13 09:09:16hunzombiAutókódoláscpp11Részben helyes 46/501ms556 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

long long findHigh(long long n) {
    long long target = __builtin_popcount(n);
    for (long long i=1; i <= n; i *= 2) {
        if (n & i) {
            n += i;
            break;
        }
    }
    long long missing = target - __builtin_popcount(n);
    long long i = 1;
    while (missing-- > 0) {
        if (!(n & i)) {
            n += i;
            i *= 2;
        }
    }

    return n;
}

ll findLow(ll n) {
    ll target  = __builtin_popcount(n);
    ll last_index;
    for (long long i=1; i <= n; i *= 2) {
        if (n & i) {
            last_index = i;
        }
    }
    for (ll i=1; i <= last_index; i *= 2) {
        target--;
    }
    if (target == 0) return -1;
    for (long long i=2; i <= n; i *= 2) {
        if (n & i && !(n & (i / 2))) {
            n ^= 3 * i / 2;
            break;
        }
    }
    return n;
}

int main()
{
    long long n;
    cin >> n;
    cout << findLow(n) << '\n' << findHigh(n) << '\n';
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base46/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva2/21ms508 KiB
4Elfogadva2/21ms316 KiB
5Részben helyes1/21ms316 KiB
6Részben helyes1/21ms332 KiB
7Elfogadva2/21ms500 KiB
8Elfogadva4/41ms316 KiB
9Elfogadva4/41ms316 KiB
10Elfogadva4/41ms540 KiB
11Elfogadva4/41ms556 KiB
12Elfogadva4/41ms552 KiB
13Részben helyes2/41ms316 KiB
14Elfogadva4/41ms316 KiB
15Elfogadva4/41ms324 KiB
16Elfogadva4/41ms316 KiB
17Elfogadva4/41ms508 KiB