Submission #1114128

#TimeUsernameProblemLanguageResultExecution timeMemory
1114128vjudge1Nice sequence (IZhO18_sequence)C++17
61 / 100
457 ms46420 KiB
//Dost SEFEROĞLU #include <bits/stdc++.h> #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") #pragma GCC optimize("O3,unroll-loops") using namespace std; //#define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int MOD = 1e9+7,inf = 2e18; const int N = 2e5+50,Q = 2e5+50; const int LIM = 500001; vi edges[LIM]; bool vis[LIM],act[LIM]; int v[LIM]; struct DAG { int nd; bool cyclic = 0; inline void reset() { cyclic = 0;; for (int i = 0;i<=nd;i++) edges[i].clear(),vis[i] = 0,act[i] = 0; } void cyclecheck(int node) { if (vis[node]) return; if (cyclic) return; vis[node] = act[node] = 1; for (auto it : edges[node]) { if (act[it]) { cyclic = 1; return; } else if (!vis[it]) cyclecheck(it); } act[node] = 0; } void checkcycle() { for (int i = 0;i<=nd;i++) { cyclecheck(i); if (cyclic) break; } } int mex = 1; int dfs(int node) { if (vis[node]) return v[node]; vis[node] = 1; for (auto it : edges[node]) dfs(it); return v[node] = mex++; } void solve() { for (int i = 0;i<=nd;i++) vis[i] = 0; for (int i = 0;i<=nd;i++) dfs(i); } }; void solve() { int n,m; cin >> n >> m; int l = 1; int r = LIM-1; // tune DAG D; while (l<=r) { int k = (l+r) >> 1; D.nd = k; for (int i = 1;i<=k;i++) { if (i >= m) edges[i].push_back(i-m); if (i >= n) edges[i-n].push_back(i); } D.checkcycle(); if (!D.cyclic) l = k+1; else r = k-1; D.reset(); } memset(v,-1,sizeof v); cout << r << '\n'; D.nd = r; for (int i = 1;i<=r;i++) { if (i >= m) edges[i].push_back(i-m); if (i >= n) edges[i-n].push_back(i); } D.solve(); for (int i = 1;i<=r;i++) { cout << v[i]-v[i-1] << ' '; } cout << '\n'; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; cin >> t; while (t --> 0) solve(); }

Compilation message (stderr)

sequence.cpp:13:29: warning: overflow in conversion from 'double' to 'int' changes value from '2.0e+18' to '2147483647' [-Woverflow]
   13 | const int MOD = 1e9+7,inf = 2e18;
      |                             ^~~~
#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...