143012025-01-10 12:10:05csdavidTom és Jerry 1 (80)cpp17Hibás válasz 0/801ms536 KiB
#include <iostream>
#include <stack>
using namespace std;

struct binary_number{
    bool a[64];
    int egyesek;
    void zero(){
        for(auto& it:a){
            it=0;
        }
        return;
    }
    void tobinary(long long x){
        zero();
        egyesek=0;
        int i=63;
        while(x){
            a[i]=x%2;
            if(a[i]) egyesek++;
            x/=2;
            i--;
        }
    }
    void write(){
        bool x=0;
        for(auto& it:a){
            if(it){
                x=1;
            }
            if(x){
                cout << it;
            }
        }
        if(!x){
            cout << 0;
        }
        return;
    }
    long long decimal(){
        long long first=0, x=0;
        for(int i=0; i<64; i++){
            if(a[i]){
                first=1;
            }

            if(first){
                x=x*2+a[i];
            }
        }
        return x;
    }
};

long long nagyobb(binary_number x){
    int i, egyesek=0;
    // x.write();
    //cout << "\n";
    for(i=62; i>=0; i--){
        if(x.a[i]) egyesek++;
        if(x.a[i]==0&&x.a[i+1]==1){
            //cout << x.a[i] << ' ' << x.a[i+1] << ' ' << i << '\n';
            swap(x.a[i], x.a[i+1]);
            break;
        }
    }

    egyesek--;
    //cout << egyesek << "\n";
    for(int j=63; j>i; j--){
        if(egyesek>0){
            egyesek--;
            x.a[j]=1;
        }
        else{
            x.a[j]=0;
        }
    }
    /*cout << "nagyobb: ";
    x.write();
    cout << "\n";*/
    return x.decimal();
}

long long kisebb(binary_number x){
    int i, egyesek=0, csere=0;
    //x.write();
    //cout << "\n";
    for(i=62; i>=0; i--){
        if(x.a[i]) egyesek++;
        //cout << x.a[i] << ' ' << x.a[i+1] << '\n';
        if(x.a[i]==1&&x.a[i+1]==0){
            //cout << x.a[i] << ' ' << x.a[i+1] << '\n';
            swap(x.a[i], x.a[i+1]);
            csere=1;
            break;
        }
    }
    if(csere==0){
        return -1;
    }
    //cout << i << ' ' << egyesek << "\n";
    egyesek--;
    for(int j=i+2; j<64; j++){
        if(egyesek>0){
            egyesek--;
            x.a[j]=1;
        }
        else{
            x.a[j]=0;
        }
    }
    /*cout << "kisebb: ";
    x.write();
    cout << "\n";*/
    return x.decimal();
}

int main()
{
    binary_number a;
    long long n;
    cin >> n;
    a.tobinary(n);
    cout << kisebb(a) << '\n' << nagyobb(a);
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/80
1Hibás válasz0/01ms316 KiB
2Hibás válasz0/01ms316 KiB
3Hibás válasz0/41ms508 KiB
4Hibás válasz0/41ms508 KiB
5Hibás válasz0/41ms316 KiB
6Hibás válasz0/41ms316 KiB
7Hibás válasz0/41ms316 KiB
8Hibás válasz0/41ms316 KiB
9Hibás válasz0/41ms316 KiB
10Hibás válasz0/41ms536 KiB
11Hibás válasz0/41ms316 KiB
12Hibás válasz0/41ms316 KiB
13Hibás válasz0/41ms316 KiB
14Hibás válasz0/41ms328 KiB
15Hibás válasz0/41ms396 KiB
16Hibás válasz0/41ms360 KiB
17Hibás válasz0/41ms316 KiB
18Hibás válasz0/41ms384 KiB
19Hibás válasz0/41ms508 KiB
20Hibás válasz0/41ms316 KiB
21Hibás válasz0/41ms316 KiB
22Hibás válasz0/41ms316 KiB