# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
497787 | Ziel | Nice sequence (IZhO18_sequence) | C++17 | 2072 ms | 66132 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/**
* LES GREATEABLES BRO TEAM
**/
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define sz(x) (int)x.size()
const bool FLAG = true;
void setIO(const string &f = "");
#define int ll
const int N = 1e6 + 156;
int was[N], visited[N];
vector<int> g[N], order;
bool dfs(int v) {
was[v] = 1;
for (int to: g[v]) {
if (!was[to]) {
if (dfs(to))
return true;
} else if (was[to] == 1)
return true;
}
was[v] = 2;
return false;
}
void dfs2(int v) {
visited[v] = 1;
for (int to: g[v]) {
if (!visited[to])
dfs2(to);
}
order.push_back(v);
}
void solve() {
int n, m;
cin >> n >> m;
int lo = 0, hi = max(n, m) * 2, res = -1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
for (int i = n; i <= mid; i++)
g[i].push_back(i - n);
for (int i = m; i <= mid; i++)
g[i - m].push_back(i);
bool have_cycle = false;
for (int i = 0; i <= mid; i++) {
if (!was[i] && dfs(i)) {
have_cycle = true;
break;
}
}
for (int i = 0; i <= mid; i++) {
was[i] = 0;
g[i].clear();
}
if (have_cycle) {
hi = mid - 1;
} else {
lo = mid + 1;
res = mid;
}
}
cout << res << '\n';
for (int i = n; i <= res; i++)
g[i].push_back(i - n);
for (int i = m; i <= res; i++)
g[i - m].push_back(i);
for (int i = 0; i <= res; i++) {
if (!visited[i])
dfs2(i);
}
reverse(order.begin(), order.end());
vector<int> p(sz(order));
for (int i = 0; i < sz(order); i++) {
p[order[i]] = i;
}
int x = p[0];
for (int i = 0; i < sz(p); i++)
p[i] -= x;
for (int i = 1; i < sz(p); i++)
cout << p[i] - p[i - 1] << ' ';
order.clear();
for (int i = 0; i <= res; i++) {
was[i] = 0;
visited[i] = 0;
g[i].clear();
}
cout << '\n';
}
/*
0 2
1 3
3 0
2 1 3 0
*/
signed main() {
setIO();
int tt = 1;
if (FLAG) {
cin >> tt;
}
while (tt--) {
solve();
}
return 0;
}
void setIO(const string &f) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen((f + ".in").c_str(), "r")) {
freopen((f + ".in").c_str(), "r", stdin);
freopen((f + ".out").c_str(), "w", stdout);
}
}
Compilation message (stderr)
# | 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... |