题目地址:戳这里
其实就是利用一个很简单的高中数学题
x1<x2<x3<...<xn
f(x)=sigma |x-xi| 那么n为奇数时 取x=x(n+1)/2 当n为偶数时 取x属于 x(n/2)~ x(n/2+1) 都行
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int p[105][105];
int main()
{
int n,m,d;
cin>>n>>m>>d;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>p[i][j];
int standard=p[0][0];
bool ok=1;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if((p[i][j]-standard)%d!=0)
{
ok=0;
break;
}
if(!ok) cout<<-1<<endl;
else
{
vector<int> v;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
v.push_back((p[i][j]-standard)/d);
sort(v.begin(),v.end());
int size=v.size();
int ans=0;
standard=v[size/2];
for(int i=0;i<size;i++)
ans+=abs(v[i]-standard);
cout<<ans<<endl;
}
}