题目链接:点击打开链接
题目大意:
给定一个n x m 的矩阵,每次操作,你可以对矩阵的某一个元素加上或减去一个整数值d,求最小的操作次数,使得矩阵的所有元素都相同,如果不能实现,输出-1。
思路:由于让求最小操作次数,则以所有的数中的中间数进行加减,此时的操作是最少的.
<span style="font-size:18px;">///矩阵
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long a[250010];
int main()
{
int n,m;
int d;
while(cin>>n>>m>>d)
{
if(n==0&&m==0&&d==0)break;
long long sum=0;
for(int i=0; i<n*m; i++)
{
cin>>a[i];
}
sort(a,a+n*m);
int f=0;
long long mid=a[n*m/2];
for(int i=0; i<n*m; i++)
{
if((mid-a[i])%d!=0)
{
f=1;
break;
}
if(mid>a[i])
{
sum+=(mid-a[i])/d;
}
else
{
sum+=(a[i]-mid)/d;
}
}
if(f==1) cout<<"-1\n";
else
cout<<sum<<endl;
}
return 0;
}</span>