我的思路:
Xn=X1+i=1∑n−1(ave−Ai).
定义Cj=i=1∑j−1(ave−Ai).
于是Xi=X1+Ci.
原本求i=1∑n∣Xi∣.
变成求mini=1∑n∣X1+Ci∣.
我的代码
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i)
scanf("%d", &a[i]);
for(int i = 1 ; i <= n ; ++ i)
{
sum += a[i];
}
sum /= n;//求平均数ave
for(int i = 2 ; i <= n ; ++ i)
{
c[i] = c[i - 1] + sum - a[i];//预处理C
}
sort(c + 1 , c + 1 + n);
int x = c[(n + 1) / 2];
for(int i = 1 ; i <= n ; ++ i)
{
ans += abs(x + c[i]);
}
cout<<ans;
return 0;
题解思路:
定义Cj=i=1∑j−1(Ai−ave).
于是Xi=X1−Ci.
原本求i=1∑n∣Xi∣.
变成求mini=1∑n∣X1−Ci∣.
题解代码:
(两者区别在算答案处的"+"和"-")
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i)
scanf("%d", &a[i]);
for(int i = 1 ; i <= n ; ++ i)
{
sum += a[i];
}
sum /= n;//求平均数ave
for(int i = 2 ; i <= n ; ++ i)
{
c[i] = c[i - 1] + sum - a[i];//预处理C
}
sort(c + 1 , c + 1 + n);
int x = c[(n + 1) / 2];
for(int i = 1 ; i <= n ; ++ i)
{
ans += abs(x - c[i]);
}
cout<<ans;
return 0;
理论上来说这两个没甚区别 但是为啥我的连样例都过不了