제출 #744801

#제출 시각아이디문제언어결과실행 시간메모리
744801CutebolGap (APIO16_gap)C++17
30 / 100
66 ms2368 KiB
#include "gap.h"
#include <bits/stdc++.h>
using namespace std ;
#define ll long long
const int inf = 1e18 ;

ll findGap(int T , int n){
    if ( T == 1 ){
        vector <ll> vec ;
        ll l = 1 , r = 1e18 , mn , mx , ans = 0 ;
        while ( l <= r ){
            if ( vec.size() == n ) break ;
            MinMax( l , r , &mn , &mx ) ;
            if ( mn == -1 || mx == -1 ) break ;
            vec.push_back(mn) ;
            if ( mn != mx ) vec.push_back(mx) ;
            l = mn + 1 , r = mx-1 ;
        }
        sort ( vec.begin() , vec.end() ) ;
        for ( int i = 1 ; i < n ; i ++ ) ans = max ( ans , vec[i]-vec[i-1] ) ;
        return ans ;
    }
    ll l = 1 , r = 1e18 , x , y, ans = 0 , rr ;
    MinMax( l , r , &x , &y ) ;
    if ( n == 2 ) return abs(x-y) ;
    rr = y ;
    ll len = (y-x-1)/(n-1) ;
    l = x , r = y ;
    MinMax( x+1 , x+len+((y-x-1)%(n-1)) , &l , &r ) ;
    if ( l != -1 ) ans = max ( ans , abs(x-l) ) ;
    x += len+((y-x-1)%(n-1)) ; y = r ;
    for ( ll i = 1 ; i < n-1 ; i ++ ){
        MinMax( x+1 , x+len , &l , &r ) ;
        x += len ;
        if ( l == -1 ) continue ;
        ans = max ( ans , abs( y-l ) ) ;
        y = r ;
    }
    ans = max ( ans , abs(y-rr) ) ;
    return ans ;
}

컴파일 시 표준 에러 (stderr) 메시지

gap.cpp:5:17: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
    5 | const int inf = 1e18 ;
      |                 ^~~~
gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:12:29: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   12 |             if ( vec.size() == n ) break ;
      |                  ~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...