Hadtsti
2024-11-18 14:39:49
这个操作方式很神秘啊,怎么做?但是看到
我们考虑如果
这有什么帮助呢?我们分析差分序列
分析操作次数,最大应该是
#include<bits/stdc++.h>
using namespace std;
int n,k,a[55];
vector<int>ans;
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(n==2)
{
if(a[1]<=a[2])
puts("Yes\n0");
else
{
if(a[2]+k<=a[1])
puts("Yes\n1\n1");
else
puts("No");
}
return 0;
}
for(int i=n;i;i--)
a[i]-=a[i-1];
for(int i=1;i<n;i++)
while(a[i]<0)
{
for(int j=n-1;j>=i;j--)
ans.push_back(j);
for(int j=i;j<n;j++)
ans.push_back(j);
a[i]+=k;
a[n]+=(n-i-1)*k;
}
while(a[n]<0)
{
for(int j=n-1;j;j--)
ans.push_back(j);
for(int j=1;j<n;j++)
ans.push_back(j);
a[n]+=(n-2)*k;
}
printf("Yes\n%d\n",ans.size());
for(int i:ans)
printf("%d ",i);
return 0;
}