This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |