Submission #370058

#TimeUsernameProblemLanguageResultExecution timeMemory
370058KoDAliens (IOI16_aliens)C++17
25 / 100
2090 ms126188 KiB
#include <bits/stdc++.h> #include "aliens.h" template <class T> using Vec = std::vector<T>; using ll = long long; ll take_photos(int n, int m, int k, Vec<int> r, Vec<int> c) { Vec<std::pair<int, int>> star; { std::map<int, int> map; for (int i = 0; i < n; ++i) { if (r[i] > c[i]) { std::swap(r[i], c[i]); } auto &val = map[r[i]]; val = std::max(val, c[i] + 1); } int last = -1; for (const auto [x, y]: map) { if (last < y) { star.emplace_back(x, y); last = y; } } } const int size = (int) star.size(); Vec<Vec<ll>> cost(size, Vec<ll>(size)); for (int i = 0; i < size; ++i) { for (int j = i + 1; j < size; ++j) { const auto L = star[j].second - star[i + 1].first; const auto l = std::max(star[i].second - star[i + 1].first, 0); cost[i][j] = (ll) L * L - (ll) l * l; } } Vec<ll> dp(size); for (int i = 0; i < size; ++i) { const auto L = star[i].second - star[0].first; dp[i] = (ll) L * L; } for (int step = 1; step < k; ++step) { auto next = dp; for (int i = 0; i < size; ++i) { for (int j = 0; j < i; ++j) { next[i] = std::min(next[i], dp[j] + cost[j][i]); } } dp = std::move(next); } return dp[size - 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...
#Verdict Execution timeMemoryGrader output
Fetching results...