제출 #369951

#제출 시각아이디문제언어결과실행 시간메모리
369951nicolaalexandraNice sequence (IZhO18_sequence)C++14
100 / 100
1150 ms86124 KiB
#include <bits/stdc++.h> #define DIM 2000010 using namespace std; vector <int> L[DIM]; int v[DIM],g[DIM]; int n,m,k,t,i,j,idx,ok; void dfs (int nod, int k){ v[nod] = ++idx; if (nod >= n){ if (!v[nod-n]) dfs (nod-n,k); else ok = 0; } if (nod + m <= k){ if (!v[nod+m]) dfs (nod+m,k); else ok = 0; } } int verif (int k){ int i; for (i=0;i<=k;i++) v[i] = g[i] = 0; for (i=1;i<=k;i++){ if (i >= n) ++g[i-n]; if (i >= m) ++g[i]; } idx = 0, ok = 1; for (i=0;i<=k;++i){ if (!g[i]){ dfs (i,k); if (!ok) return 0; }} if (!idx) return 0; for (i=1;i<=k;++i){ if (i >= n && v[i] >= v[i-n]) return 0; if (i >= m && v[i] <= v[i-m]) return 0; } return 1; } int main (){ ios_base::sync_with_stdio(false); //ifstream cin ("date.in"); //ofstream cout ("date.out"); cin>>t; for (;t--;){ cin>>n>>m; if (n % m == 0){ cout<<n-1<<"\n"; for (i=1;i<=n-1;++i) cout<<"1 "; if (n > 1) cout<<"\n"; continue; } if (m % n == 0){ cout<<m-1<<"\n"; for (i=1;i<=m-1;++i) cout<<"-1 "; if (m > 1) cout<<"\n"; continue; } int st = min(n,m)-1, dr = 400000, sol = 0; while (st <= dr){ int mid = (st+dr)>>1; if (verif(mid)){ sol = mid; st = mid+1; } else dr = mid-1; } verif (sol); cout<<sol<<"\n"; for (i=1;i<=sol;++i) cout<<v[i]-v[i-1]<<" "; if (sol) cout<<"\n"; } 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...