제출 #32040

#제출 시각아이디문제언어결과실행 시간메모리
32040osmanorhanShortcut (IOI16_shortcut)C++14
0 / 100
0 ms12956 KiB
#include "shortcut.h" #include <bits/stdc++.h> #define fi first #define se second #define all( x ) x.begin(), x.end() #define umin( x, y ) x = min( x, (y) ) #define umax( x, y ) x = max( x, (y) ) #define pb push_back using namespace std; typedef long long Lint; typedef pair<int,Lint> ii; const int inf = 1e9 + 137; const int maxn = 200020; Lint pre[maxn], suf[maxn], x[maxn]; ii st1[maxn]; int at1, al1; ii st2[maxn]; int at2, al2; int c; Lint calc( vector<ii> &v ) { if( v.size() == 3 ) { for(int i=0;i<v.size();i++) printf("-- %d %d\n",v[i].fi,v[i].se); } Lint tot = v[v.size()-1].fi-v[0].fi+c; Lint ret = 0; at1 = 0, al1 = 1; at2 = 0, al2 = 1; for(int i=0,j=0;i<v.size()*2;i++) { ii t = v[i%v.size()]; if( i >= v.size() ) t.fi += tot; while( j < i && j < v.size() && t.fi-v[j].fi > tot/2 ) { if( st1[al1].fi == j ) al1++; if( st2[al2].fi == j ) al2++; j++; } if( j >= v.size() ) break; if( al1 <= at1 ) { //printf("asd %d %d --> %d\n",j,i,st1[al1].se + t.se+t.fi); umax( ret, st1[al1].se + t.se+t.fi ); } while( at1>=al1 && st1[at1].se <= t.se-t.fi ) at1--; st1[++at1] = ii( i, t.se-t.fi ); while( at2>=al2 && st2[at2].se <= t.se+t.fi ) at2--; st2[++at2] = ii( i, t.se+t.fi ); } return ret; } long long find_shortcut(int n, vector<int> l, vector<int> d, int C) { c = C; x[0] = 0; for(int i=1;i<n;i++) x[i] = x[i-1]+l[i-1]; for(int i=0;i<n;i++) { if( i == 0 ) pre[i] = d[i]; else pre[i] = max( pre[i-1]+l[i-1], (Lint)d[i] ); } for(int i=n-1;i>=0;i--) { if( i == n-1 ) suf[i] = d[i]; else suf[i] = max( suf[i+1]+l[i], (Lint)d[i] ); } Lint ans = 1e18 + 5; for(int i=0;i<n;i++) { vector<ii> v; v.pb( ii( x[i], pre[i] ) ); for(int j=i+1;j<n;j++) { v.pb( ii( x[j], suf[j] ) ); umin( ans, calc( v ) ); //printf("Asd %d %d --> %lld\n",i,j,ans); if( i == 0 && j == 2 ) return ans; v[v.size()-1].se = d[j]; } } return ans; }

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

shortcut.cpp: In function 'Lint calc(std::vector<std::pair<int, long long int> >&)':
shortcut.cpp:27:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<v.size();i++)
                      ^
shortcut.cpp:28:44: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long long int' [-Wformat=]
         printf("-- %d %d\n",v[i].fi,v[i].se);
                                            ^
shortcut.cpp:34:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0,j=0;i<v.size()*2;i++) {
                      ^
shortcut.cpp:36:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if( i >= v.size() ) t.fi += tot;
               ^
shortcut.cpp:38:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while( j < i && j < v.size() && t.fi-v[j].fi > tot/2 ) {
                           ^
shortcut.cpp:43:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if( j >= v.size() ) break;
               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...