Submission #1085279

#TimeUsernameProblemLanguageResultExecution timeMemory
1085279zxciganNice sequence (IZhO18_sequence)C++17
6 / 100
7 ms9856 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 1e5 * 4 + 222 + 2; vector<int> g[N]; bool bad = false; void dfs (int v, vector<int>& used) { used[v] = 1; for (auto to : g[v]) { if (used[to] == 1) { bad = true; } else if (!used[to]) { dfs (to, used); } } used[v] = -1; } bool check (int len, int x, int y) { bad = false; vector<int> used (len + 1, false); for (int i = 0; i <= len; ++i) { if (i - x >= 0) { g[i - x].push_back (i); } if (i - y >= 0) { g[i].push_back (i - y); } } for (int i = 0; i <= len; ++i) { if (!used[i]) { dfs (i, used); } } for (int i = 0; i <= len; ++i) g[i].clear (); return !bad; } void top (int v, vector<bool>&used, vector<int>&ans) { used[v] = 1; for (auto to : g[v]) { if (!used[to]) { top (to, used, ans); } } ans.push_back(v); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif // LOCAL int Q; cin >> Q; int n = Q; vector<int> a (n + 1), b (n + 1); for (int i = 1; i <= n; ++i) { cin >> a[i] >> b[i]; if (b[i] % a[i] == 0) { cout << b[i] - 1 << '\n'; for (int j = 1; j < b[i]; ++j) cout << "-1 "; cout << "\n"; continue; } if (a[i] % b[i] == 0) { cout << a[i] - 1 << '\n'; for (int j = 1; j < a[i]; ++j) cout << "1 "; cout << "\n"; continue; } int l = max (a[i], b[i]) - 1, r = max (a[i], b[i]) * 4; while (l < r) { int mid = (r + l + 1) >> 1; if (check (mid, a[i], b[i])) l = mid; else r = mid - 1; } cout << l << '\n'; for (int j = 0; j <= l; ++j) { if (j - a[i] >= 0) { g[j - a[i]].push_back (j); } if (j - b[i] >= 0) { g[j].push_back (j - b[i]); } } int cnt = 0; vector<int> ans; vector<bool> used (l + 1, false); for (int j = 0; j <= l; ++j) { if (!used[j]) { top (j, used, ans); } } for (int j = 0; j <= l; ++j) g[j].clear(); reverse (begin (ans), end (ans)); vector<int> d (l + 2); for (auto it : ans) { d[it] = cnt++; } for (int j = 1; j <= l; ++j) cout << d[j] - d[j - 1] << ' '; cout << '\n'; } return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...