Submission #380546

#TimeUsernameProblemLanguageResultExecution timeMemory
380546hoaphat1Aliens (IOI16_aliens)C++17
12 / 100
9 ms364 KiB
#include <bits/stdc++.h> using namespace std; long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { vector<pair<int,int>> a; for (int i = 0; i < n; i++) { if (r[i] < c[i]) swap(r[i], c[i]); a.emplace_back(r[i], c[i]); } sort(a.begin(), a.end()); vector<pair<int,int>> b; for (int i = 0; i < n; i++) { while (!b.empty() && b.back().second >= a[i].second) b.pop_back(); b.push_back(a[i]); } swap(a, b); n = (int) a.size(); auto test = [&](long long c) { const long long inf = 1e18; vector<pair<long long, int>> dp(n + 1, make_pair(inf, 0)); dp[0] = {0, 0}; for (int j = 1; j <= n; j++) { for (int from = j; from > 0; from--) { dp[j] = min(dp[j], {dp[from - 1].first + 1ll * (a[j - 1].first - a[from - 1].second + 1) * (a[j - 1].first - a[from - 1].second + 1) + c, dp[from - 1].second + 1}); } } return dp[n]; }; long long l = 0, R = 1ll * m * m, ans = -1; while (l <= R) { long long mid = l + R >> 1; if (test(mid).second <= k) { ans = mid; R = mid - 1; } else l = mid + 1; } assert(ans !=- 1); return test(ans).first - ans * k; } /* int main() { ios::sync_with_stdio(false); cin.tie(0); cout << take_photos(5, 7, 2, {0, 4, 4, 4, 4}, {3, 4, 6, 5, 6}); }*/

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:32:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   32 |   long long mid = l + R >> 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...