제출 #230263

#제출 시각아이디문제언어결과실행 시간메모리
230263Arg_007선물상자 (IOI15_boxes)C++14
100 / 100
788 ms227704 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define pb push_back #define mp make_pair #define PI ( acos(-1.0) ) #define IN freopen("hard1.txt","r",stdin) #define OUT freopen("hard1.txt","w",stdout) #define FOR(i,a,b) for(i=a ; i<=b ; i++) #define DBG printf("Hi\n") #define i64 long long int #define eps (1e-8) #define xx first #define yy second #define ln 17 #define off 1000005 #define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL) using namespace __gnu_pbds; using namespace std ; typedef tree< i64, null_type, less<i64>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef pair<i64, i64> pii ; #define maxn 10000005 #define mod 1000000007LL #define lim 1000000000 #define INF 4500000000000000000LL mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #include "boxes.h" i64 pref[maxn] , suf[maxn] ; i64 delivery( int n , int k , int l , int p[] ) { sort(p,p+n) ; for(int i=0 ; i<n ; i++) { if( i<k ) pref[i] = 2*p[i] ; else pref[i] = 2*p[i] + pref[i-k] ; } for(int i=n-1 ; i>=0 ; i--) { if( n-i <= k ) suf[i] = 2*( l-p[i] ) ; else suf[i] = 2*(l-p[i]) + suf[i+k] ; } i64 ans = min( pref[n-1] , suf[0] ) ; for(int i=1 ; i<n ; i++) ans = min( pref[i-1] + suf[i] , ans ) ; for(int i=0 ; i+k-1 < n ; i++) { i64 ret = l ; if( i>0 ) ret += pref[i-1] ; if( i+k < n ) ret += suf[i+k] ; ans = min(ans,ret) ; } return ans ; } /* int main() { int p[] = {1,2,5} ; printf("%lld\n" , delivery(3,2,8,p) ) ; } */
#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...