Submission #447291

#TimeUsernameProblemLanguageResultExecution timeMemory
447291LucaIlieLibrary (JOI18_library)C++17
100 / 100
352 ms412 KiB
#include <vector>
#include <stdio.h>
#include <library.h>

using namespace std;

int n;
vector<int> v, tak, res;

/*int Query( vector<int> m ) {
    int ans, i;

    for ( i = 0; i < n; i++ ) {
        if ( m[i] == 1 )
            printf( "%d ", i + 1 );
    }
    printf( "\n" );

    scanf( "%d", &ans );

    return ans;
}

void Answer( vector<int> m ) {
    int i;

    for ( i = 0; i < n; i++ )
        printf( "%d ", m[i] );
}*/

void Solve( int n ) {
    int ans, p, st, dr, mij, i, j;

    if ( n == 1 )
        res.push_back( 1 );
    else {
        for ( i = 0; i < n; i++ )
            v.push_back( i );

        for ( i = 0; i < n; i++ )
            tak.push_back( 1 );
        ans = 2;
        i = 0;
        while ( ans == 2 ) {
            tak[v[i]] = 0;
            ans = Query( tak );
            tak[v[i]] = 1;
            i++;
        }
        res.push_back( v[i - 1] + 1 );
        p = i - 1;

        for ( i = 1; i < n; i++ ) {
            for ( j = p; j < n - (i - 1); j++ )
                v[j] = v[j + 1];
            st = 0;
            dr = n - i;
            while ( dr - st > 1 ) {
                mij = (st + dr) / 2;

                for ( j = 0; j < n; j++ )
                    tak[j] = 0;
                for ( j = st; j < mij; j++ )
                    tak[v[j]] = 1;
                ans = Query( tak );
                tak[res[i - 1] - 1] = 1;
                if ( Query( tak ) == ans )
                    dr = mij;
                else
                    st = mij;
            }
            res.push_back( v[st] + 1 );
            p = st;
        }
    }

    Answer( res );
}

/*int main() {
    scanf( "%d", &n );
    Solve( n );
    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...