Submission #957141

#TimeUsernameProblemLanguageResultExecution timeMemory
957141pragmatistNice sequence (IZhO18_sequence)C++17
100 / 100
973 ms60284 KiB
#include <bits/stdc++.h> using namespace std; const int N = (int)4e5+20; const int inf = (int)1e9+7; const long long INF = (long long)1e18+7; const int MOD = 42043; int sum(int x, int y) { x += y; if(x >= MOD) { x -= MOD; } return x; } int mult(int x, int y) { return 1ll*x*y%MOD; } int n, m, o, dp[N]; bool ok; vector<int> g[N], ord, ans; int used[N]; void dfs(int v) { used[v] = 1; if(!ok) { return; } if(v-n>=0 && used[v-n]==1) { ok = 0; return; } if(v-n>=0 && !used[v-n]) { dfs(v-n); } if(v+m<=o && used[v+m]==1) { ok = 0; return; } if(v+m<=o && !used[v+m]) { dfs(v+m); } used[v] = 2; ord.push_back(v); } bool may(int len) { o = len; for(int i = 0; i <= len; ++i) { used[i] = 0; dp[i] = 0; } ord.clear(); ok = 1; for(int i = 0; i <= len; ++i) { if(!used[i]) { dfs(i); } } if(!ok) { return 0; } ans = ord; return 1; } void test_case() { cin >> n >> m; int l = 0, r = 4e5, len = -1; while(l <= r) { int mid = (l+r)/2; if(may(mid)) { len = mid; l = mid+1; } else { r = mid-1; } } assert(len != -1); reverse(ans.begin(), ans.end()); int timer = 0; for(auto i : ans) { dp[i] = ++timer; } cout << len << "\n"; for(int i = 1; i <= len; ++i) { cout << dp[i]-dp[i-1] << ' '; } cout << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while(t--) { test_case(); } 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...