Submission #431317

#TimeUsernameProblemLanguageResultExecution timeMemory
431317CollypsoBoxes with souvenirs (IOI15_boxes)C++17
50 / 100
392 ms524292 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define vt vector #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() #pragma GCC optimize ("O3") #pragma GCC optimize ("O2") #define F first #define S second //#define endl '\n' //#define int long long using namespace std; ll delivery(int N, int K, int L, int p[]) { if (K == 1) { ll ans = 0; for(int i = 0; i < N; i++) ans += 2 * min(p[i], L - p[i]); return ans; } vt<pii> v; for(int i = 0; i < N; i++) v.pb({p[i], i}); sort(all(v)); vt<int> order(N); for(int i = 0; i < N; i++) order[i] = v[i].S; ll mn = LLONG_MAX; ll dp[N][K + 1]; dp[0][K] = 2ll * min(p[order[0]], L - p[order[0]]); for(int i = K - 1; i >= 0; i--) dp[0][i] = min(p[order[0]], L - p[order[0]]); for(int i = 1; i < N; i++) { ll tmp = (L - max(p[order[i]], p[order[i - 1]])); tmp += min(p[order[i]], p[order[i - 1]]); ll dist = min((ll) abs(p[order[i]] - p[order[i - 1]]), tmp); dp[i][K] = dp[i - 1][1] + dist + min(p[order[i]], L - p[order[i]]); dp[i][K - 1] = dp[i - 1][K] + min(p[order[i]], L - p[order[i]]); for(int j = K - 2; j >= 0; j--) dp[i][j] = dp[i - 1][j + 1] + dist; } ll cur_mn = LLONG_MAX; for(int i = 0; i <= K; i++) cur_mn = min(cur_mn, dp[N - 1][i]); if (cur_mn + min(p[order[N - 1]], L - p[order[N - 1]]) <= mn) { mn = min(mn, cur_mn + min(p[order[N - 1]], L - p[order[N - 1]])); //cout << mn << endl; //for(int x : order) cout << x << " "; //cout << endl; //for(int x : order) cout << p[x] << " "; //cout << endl; for(int i = K; i >= 0; i--) { //for(int j = 0; j < N; j++) cout << dp[j][i] << " "; //cout << endl; } //cout << endl; } //for(int x : order) cout << p[x] << " "; //cout << endl; for(int i = K; i >= 0; i--) { //for(int j = 0; j < N; j++) cout << dp[j][i] << " "; //cout << endl; } //cout << endl; return mn; }
#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...