Submission #41502

#TimeUsernameProblemLanguageResultExecution timeMemory
41502aomeNice sequence (IZhO18_sequence)C++14
76 / 100
2053 ms36028 KiB
#include <bits/stdc++.h> using namespace std; const int N = 400005; vector<int> vec, res; vector<int> G[N]; int vis[N]; int n, m; bool ok; void dfs(int u, bool trace) { vis[u] = 1; for (auto v : G[u]) { if (!vis[v]) dfs(v, trace); else ok &= vis[v] == 2; } vis[u] = 2; if (trace) vec.push_back(u); } bool check(int x, bool trace) { for (int i = 0; i <= x; ++i) { G[i].clear(), vis[i] = 0; } // u -> v <-> S(u) < S(v) for (int i = n; i <= x; ++i) { G[i].push_back(i - n); } for (int i = m; i <= x; ++i) { G[i - m].push_back(i); } ok = 1; for (int i = 0; i <= x; ++i) { if (!vis[i]) dfs(i, trace); } return ok; } void solve() { cin >> n >> m; int l = 0, r = max(n, m) * 2; while (l < r) { int mid = (l + r + 1) >> 1; if (check(mid, 0)) l = mid; else r = mid - 1; } vec.clear(), check(l, 1); reverse(vec.begin(), vec.end()); int len = vec.size(), pos0 = 0; for (int i = 0; i < len; ++i) if (!vec[i]) pos0 = i; res.assign(len, 0); for (int i = 0; i < len; ++i) { res[vec[i]] = i - pos0; } cout << len - 1 << '\n'; for (int i = 1; i < len; ++i) cout << res[i] - res[i - 1] << ' '; cout << '\n'; } int main() { ios::sync_with_stdio(false); int t; cin >> t; while (t--) solve(); }
#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...