제출 #369942

#제출 시각아이디문제언어결과실행 시간메모리
369942nicolaalexandraNice sequence (IZhO18_sequence)C++14
76 / 100
2084 ms82012 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){ v[nod] = ++idx; for (auto vecin : L[nod]){ if (v[vecin]) ok = 0; else dfs (vecin); } } int verif (int k){ int i; for (i=0;i<=k;i++){ L[i].clear(); v[i] = g[i] = 0; } for (i=n;i<=k;i++){ L[i].push_back(i-n); g[i-n]++; } for (i=m;i<=k;i++){ L[i-m].push_back(i); g[i]++; } idx = 0, ok = 1; for (i=0;i<=k;i++){ if (!g[i]) dfs (i); } if (!idx || !ok) 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 (){ //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 = 1000000, 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...