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;
int top[1000002], k, ans[1000002], val[1000002], n, m;
bool viz[1000002];
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) {
memset(viz, 0, sizeof(viz));
memset(val, 0, sizeof(val));
k = 0;
for (int i = 0; i <= len; i++)
if (!viz[i])
dfs(i, len);
for (int i = 1; i <= len + 1; i++)
val[top[i]] = i;
for (int 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 (int 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 i = 1; i <= t; i++) {
cin >> n >> m;
int st = 1, dr = 1000000, sol = 0;
while (st <= dr) {
int mij = (st + dr) / 2;
if (ok(mij)) {
sol = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
cout << sol << "\n";
ok(sol);
for (int i = 1; i <= sol; i++)
cout << ans[i] << " ";
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... |