Submission #993138

#TimeUsernameProblemLanguageResultExecution timeMemory
993138tch1cherinNice sequence (IZhO18_sequence)C++17
76 / 100
2024 ms57988 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> graph; vector<bool> used; vector<int> tout; int T = 0; void dfs(int u) { used[u] = true; for (int v : graph[u]) { if (!used[v]) { dfs(v); } } tout[u] = T++; } int main() { cin.tie(nullptr)->sync_with_stdio(false); int T; cin >> T; while (T--) { int N, M; cin >> N >> M; int l = -1, r = 2 * (N + M) + 1; vector<int> answer; while (r > l + 1) { int mid = (l + r) / 2; graph.assign(mid + 1, {}); used.assign(mid + 1, false); tout.resize(mid + 1); for (int i = 0; i + N <= mid; i++) { graph[i].push_back(i + N); } for (int i = 0; i + M <= mid; i++) { graph[i + M].push_back(i); } used.assign(mid + 1, false); for (int i = 0; i <= mid; i++) { if (!used[i]) { dfs(i); } } bool good = true; for (int i = 0; i <= mid; i++) { for (int j : graph[i]) { if (tout[i] < tout[j]) { good = false; } } } if (good) { l = mid; answer.resize(mid); for (int i = 0; i < mid; i++) { answer[i] = tout[i + 1] - tout[i]; } } else { r = mid; } } cout << l << "\n"; for (int i = 0; i < l; i++) { cout << answer[i] << " \n"[i + 1 == l]; } } }
#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...