考虑将给入的$A$数组差分,得到差分数组$C$
每一次操作相当于把差分数组的每一位${+1}$,其中一个位置上${-n+1}$。
我们可以直接算出要进行多少次操作:${T=frac{sum A[i]}{n*(n+1)/2}}$当然如果不能整除的话,说明一定无解。
问题转化为当前状态为$C$,目标状态为${Eleft { T,T...,T ight }}$每次要选择一个位置${+n}$,问是否可以刚好$T$步到达目标状态。
比如:
$${Aleft { left. 6,9,12,10,8 ight } ight.}$$
$${Cleft { left. -2,3,3,-2,-2 ight } ight.}$$
$${Eleft { 3,3,3,3,3 ight }}$$
显然在$1,4,5$号位置上各操作一次,一共操作$3$次即可,满足要求。
但是有一个小Trick:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
3 5 1 6