This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |