141402025-01-09 21:30:55ercseferencAutókódoláscpp17Időlimit túllépés 42/50228ms508 KiB
#include <bits/stdc++.h>
using namespace std;
vector<bool>a(1000),kis(1000);
vector<int>c(long long n)
{
    int k=0,egy=0; long long m=n,kicsi=0,nagyi=0;
    while(m!=0){a[k]=m%2; egy+=m%2; m=m/2; k++;}
    kis=a;
    int hely,egykis=0; bool van;
    for(int i=0; i<k; i++){
        egykis+=a[i];
        if(a[i]==0 && a[i+1]==1){van=1; hely=i; break;}}
    if(!van)kicsi=-1;
    else{
        swap(kis[hely],kis[hely+1]);
        for(int i=0; i<hely; i++){kis[i]=0;}
        for(int i=hely-1; i>hely-1-egykis; i--){kis[i]=1;}
        long long  t=1;
        for(int i=0; i<k; i++){kicsi+=kis[i]*t; t*=2;}}
    kis=a; egykis=0; van=0;
    for(int i=0; i<k; i++){
        egykis+=a[i];
        if(a[i]==1 && a[i+1]==0){van=1; hely=i; break;}}
    if(!van)nagyi=-1;
    else{
        swap(kis[hely],kis[hely+1]);
        for(int i=0; i<hely; i++){kis[i]=0;}
        for(int i=0; i<egykis-1; i++){kis[i]=1;}
        long long t=1;
        for(int i=0; i<=k; i++){nagyi+=kis[i]*t; t*=2;}}
    vector<int>val={kicsi, nagyi};
    return val;
}
int egy(long long n){
    int s=0;
    while(n!=0){
        if(n%2==1)s++;
        n=n/2;}
    return s;}
int hat(long long n){
    int s=0;
    while(n!=0){
        n=n/2; s++;}
    return s;}
long long mini(long long n){
    long long s=1;
    for(int i=0; i<hat(n)-1; i++){
        s=s*2;}
    return s;}
long long kerkis(long long n){
    int i=n-1;
    while(egy(i)!=egy(n)){i--;}
    return i;
    }
long long kernag(long long n){
    int i=n+1;
    while(egy(i)!=egy(n)){i++;}
    return i;}
int main()
{
    long long n,kis,nagy;
    cin>>n;
    long long sorsz=n-mini(n);
    if(n==1){kis=-1; nagy=2;}
    else if(egy(n)==1){kis=n/2; nagy=n*2;}
    else if(hat(n)==egy(n)){kis=-1; nagy=2*mini(n)+sorsz;}
    else if(sorsz==pow(2,egy(n)-1)){kis=mini(n)-pow(2,hat(n)-egy(n)-1); nagy=kernag(n);}
    else if(n==2*mini(n)-pow(2,hat(n)-egy(n))){kis=kerkis(n); nagy=2*mini(n)+pow(2,egy(n)-1)-1;}
    else {vector<int>val=c(n); kis=val[0]; nagy=val[1];}
    cout<<kis<<endl<<nagy;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base42/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/01ms508 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva4/41ms396 KiB
9Elfogadva4/41ms508 KiB
10Elfogadva4/41ms316 KiB
11Elfogadva4/41ms320 KiB
12Elfogadva4/41ms316 KiB
13Elfogadva4/41ms316 KiB
14Elfogadva4/41ms508 KiB
15Elfogadva4/41ms316 KiB
16Időlimit túllépés0/4228ms392 KiB
17Hibás válasz0/41ms316 KiB