思路
这题我的想法是将i想象为铺一个从i铺到N-1的砖,各自铺成一个半个金字塔,那么所求就是每一次铺砖的差的绝对值的和。
需要注意的是构造b数组的时候会有边界问题导致是否b数组要多铺一层。
最后是我的答案可能是我有没注意到的地方,导致acwing上过了但是ccf上只有90分显示错误
代码
#include<bits/stdc++.h>
using namespace std;
int n,N,r;
long long a[100010],b[1000000];
long long err;
int main() {
cin >> n >> N;
r = N/(n+1);
int m =(N +r-1)/r;//b的size
a[0] = 0,b[0] = 0;
for(int i =1;i <= n; ++i) {
cin >> a[i];
}
for(int i = n +1; i <= m-1; ++i) {
a[i] = N;
}
for(int i =1; i<= m-1;++i) {
b[i] = r*i;
}
for(int i = 1; i<= m-1; ++i) {
err += abs(a[i]-b[i]);
}
cout<<err<<endl;
return 0;
}
明了了,原来是数组a开的不够大,将a数组后面再加一个0就好了