답안 #44337

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
44337 2018-03-31T11:56:00 Z chonka 도서관 (JOI18_library) C++14
100 / 100
539 ms 704 KB
#include "library.h"
#include<iostream>
#include<stdio.h>
using namespace std ;

int n ;
vector < int > ret ;

vector < int > aux ;

void rev ( vector < int > &v ) {
    int sz = v.size ( ) ;
    int i ;
    for ( i = 0 ; i < ( sz / 2 ) ; i ++ ) {
        swap ( v[ i ] , v[ sz - i - 1 ] ) ;
    }
}

void unite ( int val ) {
    int i ;
    for ( i = 0 ; i < n ; i ++ ) {
        aux[ i ] = 0 ;
    }
    int sz = ret.size ( ) ;
    aux[ ret[ sz - 1 ] - 1 ] = 1 ;
    aux[ val - 1 ] = 1 ;
    if ( Query ( aux ) == 2 ) {
        rev ( ret ) ;
    }
    ret.push_back ( val ) ;
}

bool f ( int x ) {
    int i ;
    for ( i = 0 ; i < n ; i ++ ) {
        aux[ i ] = 0 ;
    }
    int sz = ret.size ( ) ;
    for ( i = 0 ; i < sz ; i ++ ) {
        aux[ ret[ i ] - 1 ] = 1 ;
    }
    int lft = x ;
    for ( i = 0 ; i < n ; i ++ ) {
        if ( aux[ i ] != 0 ) { continue ; }
        lft -- ;
        aux[ i ] = 1 ;
        if ( lft <= 0 ) { break ; }
    }
    int ans1 = Query ( aux ) ;
    for ( i = 0 ; i < sz ; i ++ ) {
        aux[ ret[ i ] - 1 ] = 0 ;
    }
    int ans2 = Query ( aux ) ;
    return ( ans1 <= ans2 ) ;
}


void add ( int id ) {
    int l , r , mid ;
    l = 1 ;
    r = n - id + 1 ;
    int h = ( n - id + 1 ) ;
    while ( l <= r ) {
        int mid = ( l + r ) / 2 ;
        if ( f ( mid ) == true ) { r = mid - 1 ; h = mid ; }
        else { l = mid + 1 ; }
    }
    int i ;
    for ( i = 0 ; i < n ; i ++ ) {
        aux[ i ] = 0 ;
    }
    for ( i = 0 ; i < id - 1 ; i ++ ) {
        aux[ ret[ i ] - 1 ] = 1 ;
    }
    for ( i = 0 ; i < n ; i ++ ) {
        if ( aux[ i ] != 0 ) { continue ; }
        h -- ;
        if ( h == 0 ) {
            unite ( i + 1 ) ;
            return ;
        }
    }
}

void Solve ( int N ) {
    n = N ;
    ret.clear ( ) ;
    ret.push_back ( 1 ) ;
    aux.resize ( n ) ;
    int i ;
    for ( i = 0 ; i < n ; i ++ ) { aux[ i ] = 0 ; }
    for ( i = 2 ; i <= n ; i ++ ) {
        add ( i ) ;
    }
    Answer ( ret ) ;
}

Compilation message

library.cpp: In function 'void add(int)':
library.cpp:59:17: warning: unused variable 'mid' [-Wunused-variable]
     int l , r , mid ;
                 ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 248 KB Output is correct
2 Correct 45 ms 336 KB Output is correct
3 Correct 43 ms 472 KB Output is correct
4 Correct 42 ms 472 KB Output is correct
5 Correct 40 ms 472 KB Output is correct
6 Correct 38 ms 472 KB Output is correct
7 Correct 62 ms 496 KB Output is correct
8 Correct 48 ms 496 KB Output is correct
9 Correct 43 ms 532 KB Output is correct
10 Correct 21 ms 532 KB Output is correct
11 Correct 2 ms 532 KB Output is correct
12 Correct 2 ms 532 KB Output is correct
13 Correct 2 ms 532 KB Output is correct
14 Correct 2 ms 532 KB Output is correct
15 Correct 4 ms 532 KB Output is correct
16 Correct 3 ms 532 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 248 KB Output is correct
2 Correct 45 ms 336 KB Output is correct
3 Correct 43 ms 472 KB Output is correct
4 Correct 42 ms 472 KB Output is correct
5 Correct 40 ms 472 KB Output is correct
6 Correct 38 ms 472 KB Output is correct
7 Correct 62 ms 496 KB Output is correct
8 Correct 48 ms 496 KB Output is correct
9 Correct 43 ms 532 KB Output is correct
10 Correct 21 ms 532 KB Output is correct
11 Correct 2 ms 532 KB Output is correct
12 Correct 2 ms 532 KB Output is correct
13 Correct 2 ms 532 KB Output is correct
14 Correct 2 ms 532 KB Output is correct
15 Correct 4 ms 532 KB Output is correct
16 Correct 3 ms 532 KB Output is correct
17 Correct 539 ms 568 KB Output is correct
18 Correct 511 ms 568 KB Output is correct
19 Correct 448 ms 568 KB Output is correct
20 Correct 438 ms 568 KB Output is correct
21 Correct 433 ms 572 KB Output is correct
22 Correct 531 ms 572 KB Output is correct
23 Correct 534 ms 704 KB Output is correct
24 Correct 180 ms 704 KB Output is correct
25 Correct 538 ms 704 KB Output is correct
26 Correct 426 ms 704 KB Output is correct
27 Correct 184 ms 704 KB Output is correct
28 Correct 442 ms 704 KB Output is correct
29 Correct 464 ms 704 KB Output is correct
30 Correct 466 ms 704 KB Output is correct