1529 2022. 11. 22 09:54:20 TomaSajt Autókódolás cpp14 Elfogadva 50/50 3ms 3900 KiB
#include <bits/stdc++.h>
#define speed ios::sync_with_stdio(0);cin.tie(0)
using namespace std;
typedef unsigned long long ull;

int popcount(ull n) {
    int res = 0;
    for (int i = 0; i < 64; i++) res += (n >> i) & 1;
    return res;
}

ull ne(ull n) {
    ull p1 = n & -n;
    ull m = n + p1 - 1; // right of the first 1 is all 1s
    ull p0 = ~m & (m + 1); // position of first 0 after the first bunch of 1
    ull masked = n & (p0 - 1);
    int c = popcount(masked) - 1;
    ull res = n - masked + p0 + (1ull << c) - 1;
    return res;
}

int main() {
    speed;
    ull n; cin >> n;
    ull pr = ~ne(~n);
    if ((pr >> 63) & 1) cout << "-1";
    else cout << pr;
    cout << '\n' << ne(n);
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1888 KiB
2 Elfogadva 0/0 2ms 2120 KiB
3 Elfogadva 2/2 2ms 2316 KiB
4 Elfogadva 2/2 2ms 2392 KiB
5 Elfogadva 2/2 2ms 2372 KiB
6 Elfogadva 2/2 2ms 2600 KiB
7 Elfogadva 2/2 2ms 2740 KiB
8 Elfogadva 4/4 2ms 2968 KiB
9 Elfogadva 4/4 2ms 3036 KiB
10 Elfogadva 4/4 2ms 3232 KiB
11 Elfogadva 4/4 2ms 3440 KiB
12 Elfogadva 4/4 2ms 3520 KiB
13 Elfogadva 4/4 2ms 3728 KiB
14 Elfogadva 4/4 2ms 3692 KiB
15 Elfogadva 4/4 2ms 3692 KiB
16 Elfogadva 4/4 2ms 3828 KiB
17 Elfogadva 4/4 2ms 3900 KiB