Submission #433668

#TimeUsernameProblemLanguageResultExecution timeMemory
433668kostia244Sky Walking (IOI19_walk)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h> #define all(x) begin(x), end(x) using namespace std; using ll = long long; vector<array<int, 2>> solve(int n, vector<array<int, 2>> pts) { set<array<int, 2>> X, Y; for(int i = 0; i < n; i++) { X.insert({pts[i][0], i}); Y.insert({pts[i][1], i}); } auto del = [&](int i) { X.erase({pts[i][0], i}); Y.erase({pts[i][1], i}); }; auto find = [&](int mode) -> array<int, 2> { array<int, 2> v; if(mode == 0) v = *Y.rbegin(); if(mode == 1) v = *X.rbegin(); if(mode == 2) v = *Y.begin(); if(mode == 3) v = *X.begin(); del(v[1]); return {pts[v[1]][0], pts[v[1]][1]}; }; vector<array<int, 2>> targets; for(int i = 0; i < n; i++) { targets.push_back(find(i%4)); } vector<array<int, 2>> sol; sol.push_back({0, targets[0][1]}); for(int i = 0; i+1 < n; i++) { int mode = i%4; if(mode == 0) { int y = sol.back()[1]; if(targets[i][0] > targets[i+1][0]) sol.push_back({targets[i][0], y}); sol.push_back({targets[i+1][0], y}); } if(mode == 2) { int y = sol.back()[1]; if(targets[i][0] < targets[i+1][0]) sol.push_back({targets[i][0], y}); sol.push_back({targets[i+1][0], y}); } if(mode == 3) { int x = sol.back()[0]; if(targets[i][1] > targets[i+1][1]) sol.push_back({x, targets[i][1]}); sol.push_back({x, targets[i+1][1]}); } if(mode == 1) { int x = sol.back()[0]; if(targets[i][1] < targets[i+1][1]) sol.push_back({x, targets[i][1]}); sol.push_back({x, targets[i+1][1]}); } //cerr << (i%4) << " " << targets[i][0] << " " << targets[i][1] << endl; } sol.push_back(targets.back()); return sol; } template<int inv> vector<array<int, 2>> transform(vector<array<int, 2>> a, int rx, int ry, int sw) { return a; if(inv && sw) swap(rx, ry); for(auto &[x, y] : a) { if(rx) x *= -1; if(ry) y *= -1; if(sw) swap(x, y); } return a; } int main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; vector<array<int, 2>> pts(n); for(auto &[x, y] : pts) cin >> x >> y; vector<array<int, 2>> sol = solve(n, pts); for(int msk = 1; msk < 8; msk++) { auto tmp = transform<1>(solve(n, transform<0>(pts, msk&1, msk&2, msk&4)), msk&1, msk&2, msk&4); if(tmp.size() < sol.size()) sol = tmp; } cout << sol.size() << '\n'; for(auto [x, y] : sol) cout << x << " " << y << '\n'; }

Compilation message (stderr)

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