Submission #753880

#TimeUsernameProblemLanguageResultExecution timeMemory
753880valerikkWiring (IOI17_wiring)C++17
0 / 100
1075 ms6532 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; const long long INF = 2e18; long long cost(vector<int> a, vector<int> b) { reverse(a.begin(), a.end()); int n = a.size(); int m = b.size(); long long ret = 0; if (n < m) { for (int i = 0; i < n; ++i) { ret -= a[i]; } ret -= (m - n) * 1ll * a[n - 1]; for (int i = 0; i < m; ++i) { ret += b[i]; } } else { for (int i = 0; i < n; ++i) { ret -= a[i]; } ret += (n - m) * 1ll * b[0]; for (int i = 0; i < m; ++i) { ret += b[i]; } } return ret; } long long min_total_length(std::vector<int> r, std::vector<int> b) { int n = r.size(); int m = b.size(); vector<pair<int, int>> kek; for (int i = 0; i < n; ++i) { kek.push_back({r[i], 0}); } for (int i = 0; i < m; ++i) { kek.push_back({b[i], 1}); } sort(kek.begin(), kek.end()); vector<vector<int>> a; for (int i = 0, j = 0; i < n + m; i = j) { while (kek[j].second == kek[i].second) { ++j; } a.push_back({}); for (int t = i; t < j; ++t) { a.back().push_back(kek[t].first); } } n = a.size(); vector<int> sz(n); for (int i = 0; i < n; ++i) { sz[i] = a[i].size(); } vector<long long> dp(sz[0] + 1, INF); dp[0] = 0; for (int rofl = 1; rofl < n; ++rofl) { vector<long long> ndp(sz[rofl] + 1, INF); ndp[0] = min(ndp[0], dp[sz[rofl - 1]]); vector<int> lol1; for (int i = sz[rofl - 1] - 1; i >= 0; --i) { lol1.push_back(a[rofl - 1][i]); vector<int> lol2; for (int j = 1; j <= sz[rofl]; ++j) { lol2.push_back(a[rofl][j - 1]); ndp[j] = min(ndp[j], dp[i] + cost(lol1, lol2)); } } dp = ndp; for (int i = sz[rofl]; i > 0; --i) { dp[i - 1] = min(dp[i - 1], dp[i]); } } return dp[sz[n - 1]]; }
#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...