35472023-02-28 21:11:49AblablablaAutókódoláscpp17Accepted 50/503ms3776 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    long long int n;
    cin >> n;
    vector<int> alap;
    long long int eredeti = n;
    int valtKezdKis = -1;
    int valtKezdNagy = -1;
    bool elsok = true;
    bool elson = true;
    int egysz = 0;
    int egyszk, egyszn;
    long long int valtozas = 2;
    long long int valtozask, valtozasn;
    alap.push_back(n % 2);
    if(n % 2 == 1){
        egysz++;
    }
    n /= 2;
    while(n > 0){
        alap.push_back(n % 2);
        if(n % 2 == 1){egysz++;}
        //cout << n % 2 << " ";
        n /= 2;
        //cout << n << "\n";
        valtozas *= 2;
        if(elsok && alap[alap.size() - 1] == 1 && alap[alap.size() - 2] == 0){  //kicsi 10 t keresünk
            valtKezdKis = alap.size() - 2;
            egyszk = egysz - 1;
            valtozask = valtozas / 4;
            elsok = false;
        }

        if(elson && alap[alap.size() - 1] == 0 && alap[alap.size() - 2] == 1){  //nagy 01 t keresünk
            valtKezdNagy = alap.size() - 2;
            egyszn = egysz - 1;
            valtozasn = valtozas / 4;
            elson = false;
        }
    }

    long long int valaszk = eredeti;
    long long int valaszn = eredeti;
    long long int hatvany = 1;
    if(elsok){
        valaszk = -1;
        elsok = false;
    } else{
        for(int i = 0; i < valtKezdKis; i++){
            if(alap[i] == 1 && i < valtKezdKis - egyszk){
                valaszk -= hatvany;
            } else if(alap[i] == 0 && i >= valtKezdKis - egyszk){
                valaszk += hatvany;
            }
            hatvany *= 2;
        }
        valaszk -= valtozask;
    }

    hatvany = 1;
    if(elson){
        alap.push_back(0);
        valtKezdNagy = alap.size() - 2;
        egyszn = egysz - 1;
        valtozasn = valtozas / 2;
        elson = false;
    }
    for(int i = 0; i < valtKezdNagy; i++){
        if(alap[i] == 0 && i < egyszn){
            valaszn += hatvany;
        } else if(alap[i] == 1 && i >= egyszn){
            valaszn -= hatvany;
        }
        hatvany *= 2;
    }
    valaszn += valtozasn;


    /*for(int i = alap.size() - 1; i >= 0; i--){
        cout << alap[i] << " ";
    }*/
    //cout << "\n";
    cout /*<< valtKezdKis << " " << egyszk << " " << valtozask << " " */<< valaszk << "\n";
    cout /*<< valtKezdNagy << " " << egyszn << " " << valtozasn << " " */<< valaszn << "\n";
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1808 KiB
2Accepted0/03ms2168 KiB
3Accepted2/23ms2304 KiB
4Accepted2/23ms2408 KiB
5Accepted2/23ms2624 KiB
6Accepted2/23ms2836 KiB
7Accepted2/23ms3052 KiB
8Accepted4/43ms3260 KiB
9Accepted4/42ms3376 KiB
10Accepted4/43ms3472 KiB
11Accepted4/42ms3584 KiB
12Accepted4/42ms3556 KiB
13Accepted4/43ms3556 KiB
14Accepted4/43ms3776 KiB
15Accepted4/43ms3772 KiB
16Accepted4/43ms3768 KiB
17Accepted4/43ms3772 KiB