Submission #1275543

#TimeUsernameProblemLanguageResultExecution timeMemory
1275543afonsopereiraAliens (IOI16_aliens)C++20
25 / 100
2089 ms572 KiB
#include "aliens.h" #include <vector> #include <algorithm> using namespace std; long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { vector<pair<int, int>> segs; segs.reserve(n); for (int i = 0; i < n; i++) { int l = min(r[i], c[i]); int r_val = max(r[i], c[i]); segs.push_back({l, r_val}); } sort(segs.begin(), segs.end(), [](const auto& a, const auto& b) { return a.first < b.first || (a.first == b.first && a.second > b.second); }); vector<pair<int, int>> segments; segments.reserve(n); int max_r = -1; for (const auto& seg : segs) { if (seg.second > max_r) { segments.push_back(seg); max_r = seg.second; } } if (segments.empty()) return 0; int s = segments.size(); k = min(k, s); const long long INF = 1e18; vector<long long> dp(s + 1, INF); vector<long long> ndp(s + 1, INF); dp[0] = 0; for (int photos = 1; photos <= k; photos++) { fill(ndp.begin(), ndp.end(), INF); for (int i = photos; i <= s; i++) { for (int prev = photos - 1; prev < i; prev++) { if (dp[prev] >= INF) continue; int left = segments[prev].first; int right = segments[i-1].second; long long side = (long long)(right - left + 1); long long cost = side * side; if (prev > 0) { int prev_right = segments[prev-1].second; if (prev_right >= left) { long long overlap = (long long)(prev_right - left + 1); cost -= overlap * overlap; } } ndp[i] = min(ndp[i], dp[prev] + cost); } } swap(dp, ndp); } return dp[s]; }

Compilation message (stderr)

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...