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 1000010
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)
return 0;
return ok;
}
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]<<" ";
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... |