Submission #123186

#TimeUsernameProblemLanguageResultExecution timeMemory
123186SortingWiring (IOI17_wiring)C++14
20 / 100
37 ms4636 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2007; const int MAXN = 1e5 + 7; const long long inf = 1e18; int n, m; pair<long long, bool> dp[N][N]; int x[MAXN], y[MAXN]; long long solve(int pos1, int pos2){ if(pos1 >= n){ if(pos2 >= m){ return 0; } return inf; } if(pos2 >= m){ return inf; } pair<long long, bool> &p = dp[pos1][pos2]; if(p.second){ return p.first; } p.second = true; p.first = min(solve(pos1 + 1, pos2 + 1), min(solve(pos1 + 1, pos2), solve(pos1, pos2 + 1))) + abs(x[pos1] - y[pos2]); return p.first; } long long min_total_length(vector<int> r, vector<int> b){ n = (int)r.size(); m = (int)b.size(); for(int i = 0; i < n; i++){ x[i] = r[i]; } for(int i = 0; i < m; i++){ y[i] = b[i]; } if(n > 5000 || m > 5000){ long long ans = 0; if(n <= m){ for(int i = 0; i < n - 1; i++){ ans += abs(r[i] - b[i]); } for(int i = n - 1; i < m; i++){ ans += abs(r[n - 1] - b[i]); } } else{ for(int i = 0; i < n - m + 1; i++){ ans += abs(r[i] - b[0]); } for(int i = 0; i < m - 1; i++){ ans += abs(r[i + n - m + 1] - b[i + 1]); } } return ans; } return solve(0, 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...