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>
#pragma GCC optimize ("O1")
#pragma GCC optimize ("O3")
using namespace std;
int k, ans[500002], val[500002], n, m, i;
bool viz[500002];
int top[500002];
void dfs (int x, int len) {
viz[x] = 1;
if (x + n <= len && !viz[x + n])
dfs(x + n, len);
if (x - m >= 0 && !viz[x - m])
dfs(x - m, len);
top[++k] = x;
}
bool ok (int len) {
for (i = 0;i <= len; i++)
val[i] = viz[i] = 0;
k = 0;
for (i = 0; i <= len; i++)
if (!viz[i])
dfs(i, len);
for (i = 1; i <= len + 1; i++)
val[top[i]] = i;
for (i = 0; i <= len; i++) {
if (i >= n && val[i] > val[i - n])
return false;
if (i + m <= len && val[i] > val[i + m])
return false;
}
for (i = 1; i <= len; i++)
ans[i] = val[i] - val[i - 1];
return true;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t;
cin >> t;
for (int T = 1; T <= t; T++) {
cin >> n >> m;
int sol = 0;
for (int pas = (1 << 19); pas; (pas >>= 1))
if (sol + pas <= n + m && ok(sol + pas))
sol += pas;
cout << sol << "\n";
ok(sol);
for (int j = 1; j <= sol; j++)
cout << ans[j] << " ";
cout << "\n";
}
return 0;
}
# | 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... |