Submission #935226

#TimeUsernameProblemLanguageResultExecution timeMemory
935226Cyber_WolfAliens (IOI16_aliens)C++17
Compilation error
0 ms0 KiB
// Problem: P6 - Aliens // Contest: DMOJ - IOI '16 // URL: https://dmoj.ca/problem/ioi16p6 // Memory Limit: 256 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org) #include <bits/stdc++.h> using namespace std; #define lg long long #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); const lg N = 1e5+5; lg n, k; lg dp[N]; lg opt[N]; vector<array<lg, 2>> p; vector<lg> o; void solve(lg lambda) { for(int i = 0; i <= n; i++) dp[i] = 2e18, opt[i] = 2e18; dp[0] = opt[0] = 0; deque<lg> slope, inter; deque<lg> opts; lg sz = 1; opts.push_back(0); slope.push_back(-2*p[0][1]); inter.push_back(p[0][1]*p[0][1]-o[0]+dp[0]); for(int i = 1; i <= n; i++) { while(sz > 1 && p[i-1][0]*slope[1]+inter[1] <= p[i-1][0]*slope[0]+inter[0]) { opts.pop_front(); slope.pop_front(); inter.pop_front(); sz--; } dp[i] = p[i-1][0]*slope.front()+inter.front()+p[i-1][0]*p[i-1][0]+lambda; opt[i] = opt[opts.front()]+1; if(i < n) { lg x = -2*p[i][1], y = p[i][1]*p[i][1]-o[i]+dp[i]; while(sz > 1 && (inter[sz-2]-y)*(slope[sz-1]-slope[sz-2]) <= (inter[sz-2]-inter[sz-1])*(x-slope[sz-2])) { slope.pop_back(); inter.pop_back(); opts.pop_back(); sz--; } slope.push_back(x); inter.push_back(y); opts.push_back(opt[i]); sz++; } } return; } lg take_photos(int NM, int m, int K, int r[], int c[]) { n = NM, k = K; set<array<lg, 2>> pt; for(int i = 0; i < n; i++) { if(r[i] < c[i]) swap(r[i], c[i]); pt.insert({r[i], -c[i]}); } for(auto [x, y] : pt) { while(p.size() && p.back()[1] >= -y) p.pop_back(); p.push_back({x, -y}); } for(auto &it : p) it[1]--; lg la = -1e18; for(auto it : p) { if(la-it[1] > 0) o.push_back((la-it[1])*(la-it[1])); else o.push_back(0); la = it[0]; } n = p.size(); lg s = -1, e = 1e15; k = min(k, n); while(e-s > 1) { lg mid = (s+e)/2; solve(mid); // cout << mid << '\n'; // cout << dp[n] << ' ' << opt[n] << '\n'; if(opt[n] >= k) { s = mid; } else{ e = mid; } } solve(s); return dp[n]-k*s; } int main() { int n, m, k; cin >> n >> m >> k; int r[n], c[n]; for(int i = 0; i < n; i++) { cin >> r[i] >> c[i]; } cout << take_photos(n, m, k, r, c) << '\n'; return 0; } /* m1x+c1 <= m2x+c2 m1x-m2x <= c2-c1 x <= (c2-c1)/(m1-m2) 5 7 2 0 3 4 4 4 6 4 5 4 6 */

Compilation message (stderr)

/usr/bin/ld: /tmp/ccqGlXWS.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cccyzjnR.o:aliens.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccqGlXWS.o: in function `main':
grader.cpp:(.text.startup+0xf0): undefined reference to `take_photos(int, int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status