Submission #1215583

#TimeUsernameProblemLanguageResultExecution timeMemory
1215583adaawfAlternating Current (BOI18_alternating)C++20
0 / 100
3093 ms12096 KiB
#include <bits/stdc++.h> using namespace std; struct CUR { int x, y, num; } a[100005], b[100005]; bool cmp(CUR aa, CUR bb) { return aa.x < bb.x; } vector<int> gg[200005]; vector<CUR> v; int f[200005], res[100005], d[100005]; int main() { int n, m; cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> a[i].x >> a[i].y; if (a[i].y + 1 == a[i].x) a[i] = {1, n}; if (a[i].y < a[i].x) a[i].y += n; a[i].num = i; b[i] = a[i]; } sort(a + 1, a + m + 1, cmp); int ma = 0, h = 0; for (int i = 1; i <= m; i++) { if (a[i].y <= ma) { d[a[i].num] = h; } else { v.push_back(a[i]); ma = a[i].y; h = a[i].num; } } if (v.size() % 2 == 0) { for (int i = 0; i < v.size(); i++) { int h = i % 2; res[v[i].num] = h; } for (int i = 1; i <= m; i++) { if (d[i]) res[i] = (res[d[i]] ^ 1); for (int j = b[i].x; j <= b[i].y; j++) { f[j] |= (1 << res[i]); } } for (int i = 1; i <= n; i++) { if ((f[i] | f[i + n]) != 3) { cout << "impossible"; return 0; } } } else { for (int k = 0; k < v.size(); k++) { for (int i = 0; i < v.size(); i++) res[v[i].num] = 0; int h = k; while (1) { if ((k + 1) % v.size() == h) break; res[v[h].num] = 1; h += 2; h %= v.size(); } for (int i = 1; i <= n * 2; i++) gg[i].clear(); for (int i = 1; i <= m; i++) { if (d[i]) res[i] = (res[d[i]] ^ 1); gg[b[i].x].push_back(res[i] + 1); gg[b[i].y + 1].push_back(-(res[i] + 1)); } int x = 0, y = 0; for (int i = 1; i <= n * 2; i++) { for (int w : gg[i]) { if (w == 1) x++; else if (w == 2) y++; else if (w == -1) x--; else y--; } f[i] = 0; if (x) f[i] |= 1; if (y) f[i] |= 2; } int flag = 0; for (int i = 1; i <= n; i++) { if ((f[i] | f[i + n]) != 3) { flag = 1; break; } } if (flag == 0) { for (int i = 1; i <= m; i++) cout << res[i]; return 0; } } cout << "impossible"; return 0; } for (int i = 1; i <= m; i++) cout << res[i]; }
#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...