解析:
一道模拟题。
我们用希尔排序模拟一下即可。
如果 i i i 大于 a i a_i ai,那么交换。否则退出循环。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[100005]={};
int n,m;
int ans=0;
int mian(){
#if 0
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++){
int k;
cin>>k;
for(int j=1;j<=n;j++){
ans++;
int t=j;
while(t>k){
if(a[t]<a[t-k]){
swap(a[t],a[t-k]);
t-=k;
ans++;
}
else break;
}
}
}
cout<<ans<<"\n";
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}