Submission #91322

#TimeUsernameProblemLanguageResultExecution timeMemory
91322toloraiaNice sequence (IZhO18_sequence)C++14
61 / 100
197 ms10704 KiB
#include <bits/stdc++.h> #define F first #define S second #define mp make_pair #define pb push_back #define ll long long #define LEFT(a) ((a)<<1) #define RIGHT(a) (LEFT(a) + 1) #define MID(a,b) ((a+b)>>1) #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b)) using namespace std; const int N = 1e6 + 5, NN = 1e5; int F[N]; int n, m, M; bool ok; void dfs (int k, int p){ //cout<<k<<" "<<p<<" "<<M<<" "<<n<<" "<<m<<" "<<F[k]<<endl; if (ok == 0) return; if (F[k] == p){ ok = 0; return; } if (F[k]) return; F[k] = p; if (k + m <= M) dfs (k + m, p); if (k - n >= 0) dfs (k - n, p); } int nn; int a[N], b[N]; void go (int k){ if (F[k]) return; F[k] = 1; if (k + n <= M) go (k + n); if (k - m >= 0) go (k - m); a[++nn] = k; } int main() { ios::sync_with_stdio(false); int T; cin>>T; while (T--){ cin>>n>>m; int l = 0, r = NN; while (l < r){ M = (l + r + 1) / 2; ok = 1; for (int i = 0; i <= M; i++) F[i] = 0; for (int i = 0; i <= M && ok == 1; i++) if (F[i] == 0) dfs (i, i + 1); if (ok) l = M; else r = M - 1; //cout<<M<<" "<<ok<<endl; } M = l; nn = -1; for (int i = 0; i <= M; i++) F[i] = 0; for (int i = 0; i <= M; i++) if (F[i] == 0) go (i); for (int i = 0; i <= M; i++) b[a[i]] = i; cout<<M<<endl; for (int i = 1; i <= M; i++) cout<<b[i] - b[i - 1]<<" "; cout<<endl; } 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...