제출 #219611

#제출 시각아이디문제언어결과실행 시간메모리
219611summitwei선물상자 (IOI15_boxes)C++17
100 / 100
582 ms285176 KiB
#include <bits/stdc++.h> #include <boxes.h> using namespace std; typedef vector<int> vi; typedef vector<pair<int, int> > vpii; typedef pair<int, int> pii; typedef long long ll; typedef pair<ll, ll> pll; typedef pair<double, double> pdd; typedef vector<ll> vll; #define INF 1000000000000000000LL #define MOD 1000000007LL #define EPSILON 0.00001 #define f first #define s second #define pb push_back #define mp make_pair #define FOR(i, a, b) for (int i=(a); i<=(signed)(b); i++) #define F0R(i, a) for (int i=0; i<(signed)(a); i++) #define RFOR(i, a, b) for (int i=(a); i >= b; i--) #define MN 10000005 int n, k; ll l; ll d[MN]; ll ps[MN]; ll rps[MN]; ll delivery(int N, int K, int L, int positions[]){ n = N; k = K; l = (ll)L; F0R(i, n) d[i] = positions[i]; F0R(i, n){ ps[i] = d[i]*2; if(i >= k){ ps[i] += ps[i-k]; } } RFOR(i, n-1, 0){ rps[i] = (l-d[i])*2; if(i+k < n){ rps[i] += rps[i+k]; } } ll ans = INF; F0R(i, n-1){ ans = min(ans, ps[i]+rps[i+1]); } ans = min(ans, min(rps[0], ps[n-1])); if(k >= n) ans = min(ans, l); else{ F0R(i, n-k+1){ int lf = i-1, rt = i+k; ll res = l+(lf<0?0:ps[lf])+(rt>=n?0:rps[rt]); ans = min(ans, res); } } return ans; } /*int main(){ //ios_base::sync_with_stdio(false); //cin.tie(0); int N, K, L; cin >> N >> K >> L; int pos[N]; F0R(i, N) cin >> pos[i]; cout << delivery(N, K, L, pos) << "\n"; return 0; }*/
#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...