제출 #1022399

#제출 시각아이디문제언어결과실행 시간메모리
1022399mdn2002Fountain Parks (IOI21_parks)C++17
컴파일 에러
0 ms0 KiB
/* Mayoeba Yabureru */ //#include "parks.h" #include<bits/stdc++.h> using namespace std; static vector<int> _u, _v, _a, _b; void build(vector<int> u, vector<int> v, vector<int> a, vector<int> b) { _u = u; _v = v; _a = a; _b = b; } int construct_roads(vector<int> x, vector<int> y) { int n = x.size(); vector<vector<int>> gr(n + 1); vector<int> dsu(n + 1); map<pair<int, int>, int> mp; map<pair<int, int>, pair<int, int>> mpp; vector<pair<int, int>> vv; x.insert(x.begin(), 0); y.insert(y.begin(), 0); for (int i = 1; i <= n; i ++) { mp[{x[i], y[i]}] = i; vv.push_back({x[i], y[i]}); dsu[i] = i; } vector<int> u, v, a, b; map<pair<int, int>, int> taken; map<pair<int, int>, int> connected; function<int(int)> fp = [&](int x) { if (dsu[x] == x) return x; return dsu[x] = fp(dsu[x]); }; sort(vv.begin(), vv.end()); for (int i = 0; i < n; i ++) { auto xx = make_pair(vv[i].first, vv[i].second + 2); if (mp[xx]) { int fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (fx != fy) { u.push_back(mp[vv[i]]); v.push_back(mp[xx]); gr[mp[vv[i]]].push_back(mp[xx]); gr[mp[xx]].push_back(mp[vv[i]]); dsu[fx] = fy; connected[{mp[vv[i]], mp[xx]}] = 1; connected[{mp[xx], mp[vv[i]]}] = 1; int ad = vv[i].second % 4; mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first - 1 + ad, vv[i].second + 1}; taken[{vv[i].first - 1 + ad, vv[i].second + 1}] = 1; } } } for (int i = 0; i < n; i ++) { auto xx = make_pair(vv[i].first + 2, vv[i].second); if (mp[xx]) { int fx = fp(mp[vv[i]]), fy = fp(mp[xx]); if (fx != fy) { u.push_back(mp[vv[i]]); v.push_back(mp[xx]); gr[mp[vv[i]]].push_back(mp[xx]); gr[mp[xx]].push_back(mp[vv[i]]); dsu[fx] = fy; connected[{mp[vv[i]], mp[xx]}] = 1; connected[{mp[xx], mp[vv[i]]}] = 1; if (taken[{vv[i].first + 1, vv[i].second + 1}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first + 1, vv[i].second + 1}; taken[{vv[i].first + 1, vv[i].second + 1}] = 1; } else if (taken[{vv[i].first + 1, vv[i].second - 1}] == 0) { mpp[{mp[vv[i]], mp[xx]}] = {vv[i].first + 1, vv[i].second - 1}; taken[{vv[i].first + 1, vv[i].second - 1}] = 1; } else assert(0); } } } int num = 0, st = 1; vector<int> vis(n + 1); function<void(int)> go = [&] (int v) { num ++; vis[v] = 1; for (auto u : gr[v]) { if (vis[u] == 0) go(u); } }; go(st); for (int i = 0; i < u.size(); i ++) { a.push_back(mpp[{u[i], v[i]}].first); b.push_back(mpp[{u[i], v[i]}].second); u[i] --; v[i] --; } if (num == n) { build(u, v, a, b); return 1; } return 0; } int main() { int n = 10000; assert(scanf("%d", &n) == 1); vector<int> x(n), y(n); for (int i = 0; i < n; i++) assert(scanf("%d%d", &x[i], &y[i]) == 2); const int possible = construct_roads(x, y); printf("%d\n", possible); if (possible == 1) { int m = _u.size(); printf("%d\n", m); for (int j = 0; j < m; j++) { printf("%d %d %d %d\n", _u[j], _v[j], _a[j], _b[j]); } } }

컴파일 시 표준 에러 (stderr) 메시지

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:96:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |     for (int i = 0; i < u.size(); i ++) {
      |                     ~~^~~~~~~~~~
/usr/bin/ld: /tmp/ccyYK7yS.o: in function `build(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)':
grader.cpp:(.text+0x270): multiple definition of `build(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'; /tmp/cctiAcQS.o:parks.cpp:(.text+0xbc0): first defined here
/usr/bin/ld: /tmp/ccyYK7yS.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cctiAcQS.o:parks.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status