Submission #40505

#TimeUsernameProblemLanguageResultExecution timeMemory
40505szawinisNice sequence (IZhO18_sequence)C++14
0 / 100
35 ms17400 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e5+1; int n, m, dsu[N], nxt[N], pos[N], res[N]; bool mark[N]; int root(int v) { return (dsu[v] < 0 ? v : dsu[v] = root(dsu[v])); } void merge(int u, int v) { nxt[u] = v; mark[v] = true; u = root(u), v = root(v); assert(u != v); dsu[u] += dsu[v]; dsu[v] = u; } void solve() { scanf("%d %d", &n, &m); fill(dsu, dsu+N, -1); fill(nxt, nxt+N, -1); fill(pos, pos+N, -1); fill(mark, mark+N, 0); fill(res, res+N, 0); int k = 0; for(k = 1; k <= 2*max(n, m); k++) { // cout << k - n << ' ' << k << ' ' << endl; // cout << k << ' ' << k - m << endl; if(k - n >= 0 && k - m >= 0) { if(root(k - n) == root(k - m) || root(k) == root(k - n) || root(k) == root(k - m)) break; merge(k - n, k); merge(k, k - m); } else if(k - n >= 0) { if(root(k) == root(k - n)) break; merge(k - n, k); } else if(k - m >= 0) { if(root(k) == root(k - m)) break; merge(k, k - m); } } --k; vector<int> ord; for(int i = 0; i <= k; i++) if(!mark[i]) { ord.push_back(i); break; } assert(!ord.empty()); for(int i = ord[0]; nxt[i] != -1; i = nxt[i]) ord.push_back(nxt[i]); for(int i = 0; i <= k; i++) pos[ord[i]] = i; for(int i = 1; i <= k; i++) res[i] = pos[i-1] - pos[i]; printf("%d\n", k); for(int i = 1; i <= k; i++) printf("%d ", res[i]); printf("\n"); } int main() { int t; scanf("%d", &t); while(t--) solve(); }

Compilation message (stderr)

sequence.cpp: In function 'void solve()':
sequence.cpp:19:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
                        ^
sequence.cpp: In function 'int main()':
sequence.cpp:60:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &t);
                 ^
#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...