제출 #268772

#제출 시각아이디문제언어결과실행 시간메모리
268772hamerin전선 연결 (IOI17_wiring)C++17
7 / 100
255 ms262148 KiB
#include "wiring.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") using namespace std; using i64 = long long; using d64 = long double; using pi = pair<int, int>; using pli = pair<i64, i64>; using ti = tuple<int, int, int>; using tli = tuple<i64, i64, i64>; #define iterall(cont) cont.begin(), cont.end() #define prec(n) setprecision(n) << fixed int inf = numeric_limits<int>::max() / 2; i64 min_total_length(vector<int> r, vector<int> b) { const int R = r.size(); const int B = b.size(); vector<int> Rv, Bv; Rv.emplace_back(-inf); Bv.emplace_back(-inf); copy(iterall(r), back_inserter(Rv)); copy(iterall(b), back_inserter(Bv)); Rv.emplace_back(inf); Bv.emplace_back(inf); vector<vector<i64>> dp(R + 1, vector<i64>(B + 1)); for(int i=1;i<=R;i++) dp[i][0] = inf; for(int i=1;i<=B;i++) dp[0][i] = inf; for (int i = 1; i <= R; i++) { for (int j = 1; j <= B; j++) { auto it1 = lower_bound(iterall(Bv), Rv[i]); auto it2 = lower_bound(iterall(Rv), Bv[j]); i64 dR = min(*it1 - Rv[i], Rv[i] - *prev(it1)); i64 dB = min(*it2 - Bv[j], Bv[j] - *prev(it2)); dp[i][j] = min({dp[i - 1][j] + dR, dp[i][j - 1] + dB, dp[i - 1][j - 1] + abs(Rv[i] - Bv[j])}); } } return dp[R][B]; }
#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...