Submission #91960

#TimeUsernameProblemLanguageResultExecution timeMemory
91960popovicirobertNice sequence (IZhO18_sequence)C++14
30 / 100
233 ms33908 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long #define ld long double // 217 // 44 using namespace std; const int INF = 5e8; const int MAXN = (int) 2e5; vector <int> g[2 * MAXN + 1]; char vis[2 * MAXN + 1]; void dfs(int nod, bool &ok) { vis[nod] = 1; for(auto it : g[nod]) { if(vis[it] == 0) { dfs(it, ok); } else if(vis[it] == 1) { ok = 0; } if(ok == 0) { return ; } } vis[nod] = 2; } inline bool check(int len, int n, int m) { int i; for(i = 0; i <= len; i++) { g[i].clear(); vis[i] = 0; } for(i = 1; i <= len; i++) { if(i >= n) { g[i - n].push_back(i); } if(i >= m) { g[i].push_back(i - m); } } bool ok = 1; for(i = 0; i <= len && ok; i++) { if(vis[i] == 0) { dfs(i, ok); } } return ok; } inline int get(int n, int m) { int res = n + m - 2; while(check(res, n, m)) { res++; } return res - 1; } vector <int> ord; int sp[2 * MAXN + 1]; void dfs1(int nod) { vis[nod] = 1; for(auto it : g[nod]) { if(vis[it] == 0) { dfs1(it); } } ord.push_back(nod); } inline void solve(int sz, int n, int m) { int i; for(i = 0; i <= sz; i++) { g[i].clear(); vis[i] = 0; if(i - n >= 0) { g[i - n].push_back(i); } if(i - m >= 0) { g[i].push_back(i - m); } } ord.clear(); for(i = 0; i <= sz; i++) { if(vis[i] == 0) { dfs1(i); } } int val = -INF; for(auto it : ord) { if(it == 0) { val = max(val, 0); sp[it] = 0; val++; continue; } for(auto itr : g[it]) { val = max(val, sp[itr] + 1); } sp[it] = val; val++; } } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int t, i, j; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> t; while(t > 0) { t--; int n, m; cin >> n >> m; int mn = min(n, m), mx = max(n, m); if(mx % mn == 0) { cout << mx - 1 << "\n"; int sign = 1; if(mn == n) { sign = -1; } for(i = 1; i < mx; i++) { cout << sign << " "; } if(mx > 1) { cout << "\n"; } continue; } int sz = get(n, m); solve(sz, n, m); cout << sz << "\n"; for(i = 1; i <= sz; i++) { cout << sp[i] - sp[i - 1] << " "; } cout << "\n"; } //cin.close(); //cout.close(); return 0; }

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:114:15: warning: unused variable 'j' [-Wunused-variable]
     int t, i, j;
               ^
#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...