题目链接:点击打开链接
题目大意:
给定一个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";elsecout<<sum<<endl;}return 0;
}</span>