Submission #746449

#TimeUsernameProblemLanguageResultExecution timeMemory
746449danikoynovWiring (IOI17_wiring)C++14
20 / 100
22 ms5312 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e5 + 10; const ll inf = 1e18; int n, m; ll r[maxn], b[maxn], dp[210][210]; ll min_total_length(vector<int> R, vector<int> B) { n = R.size(); m = B.size(); for (int i = 1; i <= n; i ++) r[i] = R[i - 1]; for (int i = 1; i <= m; i ++) b[i] = B[i - 1]; r[0] = - inf; b[0] = - inf; if (n <= 200 && m <= 200) { for (int i = 0; i <= n; i ++) for (int j = 0; j <= m; j ++) dp[i][j] = inf; dp[0][0] = 0; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { dp[i][j] = min(dp[i - 1][j], min(dp[i - 1][j - 1], dp[i][j - 1])); dp[i][j] = dp[i][j] + abs(r[i] - b[j]); } } return dp[n][m]; } else { ll ans = 0; int mx = min(n, m); for (int i = 1; i <= mx; i ++) { int id1 = n - i + 1; int id2 = i; ans = ans + abs(r[id1] - b[id2]); } if (n > m) { for (int i = 1; i <= n - mx; i ++) ans = ans + abs(r[i] - b[1]); } else { for (int i = m; i > mx; i --) ans = ans + abs(b[i] - r[n]); } return ans; } }
#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...