Submission #41662

#TimeUsernameProblemLanguageResultExecution timeMemory
41662cheater2kNice sequence (IZhO18_sequence)C++14
100 / 100
1843 ms55828 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; int n, m, sn, sm; int nelement; int f[N]; int deg[N]; vector<int> g[N]; bool check(int x) { // -m +n int add = sn, sub = sm; int cur = x; while(add || sub) { if (sub && cur >= m) --sub, cur -= m; else if (add && cur + n <= x) --add, cur += n; else return false; } return true; } void solve() { cin >> n >> m; int gcd = __gcd(n, m); sn = m / gcd, sm = n / gcd; int low = 0, high = 500000; while(low < high) { int mid = ((low + high + 1) >> 1); if (!check(mid)) low = mid; else high = mid - 1; } // build the sequence nelement = low; for (int i = 0; i <= nelement; ++i) g[i].clear(), deg[i] = 0; for (int i = 0; i <= nelement; ++i) { // f[i] < f[i - n] if (i >= n) g[i - n].push_back(i), deg[i]++; // f[i] > f[i - m] if (i >= m) g[i].push_back(i - m), deg[i - m]++; } queue<int> q; for (int i = 0; i <= nelement; ++i) if (!deg[i]) q.push(i); int cnt = 0; while(!q.empty()) { int u = q.front(); q.pop(); f[u] = cnt++; for (int &v : g[u]) { if (--deg[v] == 0) q.push(v); } } for (int i = 0; i <= nelement; ++i) f[i] = cnt - 1 - f[i]; for (int i = 1; i <= nelement; ++i) f[i] -= f[0]; f[0] = 0; printf("%d\n", nelement); for (int i = 1; i <= nelement; ++i) printf("%d ", f[i] - f[i - 1]); printf("\n"); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int tt; cin >> tt; while(tt--) { solve(); } }
#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...