Submission #634062

#TimeUsernameProblemLanguageResultExecution timeMemory
634062TobNice sequence (IZhO18_sequence)C++14
76 / 100
2096 ms55288 KiB
#include <bits/stdc++.h> #define ll long long #define F first #define S second #define all(x) x.begin(), x.end() #define pb push_back #define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; ll nxt() {ll num; cin >> num; return num;} const int maxn = 4e5 + 7; int n, m; bool ndag; vector <int> v; int adj[maxn][2]; ll val[maxn], bio[maxn], ps[maxn], siz[maxn], sz[maxn]; void dfs(int x) { bio[x] = 1; for (int i = 0; i < siz[x]; i++) { if (bio[adj[x][i]] == 2) continue; if (bio[adj[x][i]] == 1) { ndag = 1; continue; } dfs(adj[x][i]); } bio[x] = 2; v.pb(x); } bool stask(int ma) { for (int i = 0; i <= ma; i++) siz[i] = bio[i] = 0; v.clear(); ndag = 0; for (int i = 0; i <= ma; i++) { if (i + m <= ma) adj[i][siz[i]++] = i+m; if (i + n <= ma) adj[i+n][siz[i+n]++] = i; } for (int i = 0; i <= ma; i++) { if (!bio[i]) dfs(i); } if (ndag) return 1; int cc = ma; for (auto it : v) { val[it] = cc--; } for (int i = 1; i <= ma; i++) { ps[i] = ps[i-1] + val[i] - val[i-1]; if (i - m >= 0) { if (ps[i] - ps[i-m] <= 0) return 1; } if (i - n >= 0) { if (ps[i] - ps[i-n] >= 0) return 1; } } return 0; } void task() { cin >> n >> m; ll lo = max(n, m) - 1, hi = max(n, m) * 2; if (n == m) { cout << lo << "\n"; for (int i = 1; i <= lo; i++) cout << "1 "; cout << "\n"; return; } while (lo < hi) { int mid = (lo + hi + 1) / 2; if (stask(mid)) hi = mid - 1; else lo = mid; } stask(hi); cout << hi << "\n"; for (int i = 1; i <= hi; i++) { cout << val[i] - val[i-1] << " "; } cout << "\n"; } int main () { FIO; int t; cin >> t; while (t--) task(); return 0; }
#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...