题解:CF2039D Shohag Loves GCD
简单题。
注意到答案与数根本没有关系,从而想到先把数从大到小排序。
接下来我们一个一个填数,由于字典序要最大,所以第一位肯定填最大的数。
注意到
于是我们用
void sol(){
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++) ans[i]=0;
for (int i=1;i<=m;i++) cin>>a[i];
sort(a+1,a+m+1,greater<int>());
ans[1]=1;
for (int i=2;i<=n;i++){
int ma=0;
for (int j=1;j*j<=i;j++){
if (i%j==0){
ma=max(ma,max(ans[j],ans[i/j]));
}
}
ans[i]=ma+1;
if (ans[i]>m) return cout<<-1<<endl,void();
}
for (int i=1;i<=n;i++) cout<<a[ans[i]]<<' ';
cout<<endl;
}