题意:给定 n * m 个数,然后每次只能把其中一个数减少d, 问你能不能最后所有的数相等。
析:很简单么,首先这个矩阵没什么用,用一维的存,然后找那个中位数即可,如果所有的数减去中位数,都能整除d,那就是可以,并且记录数据。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 500 + 5;
const int INF = 0x3f3f3f3f;
const int dr[] = {0, 0, 1, -1};
const int dc[] = {1, -1, 0, 0};
int a[maxn*maxn];
int main(){
int n, m, d;
cin >> n >> m >> d;
int cnt = 0;
for(int i = 0; i < n * m; ++i) cin >> a[cnt++];
sort(a, a+cnt);
int x = a[cnt/2];
int ans = 0;
for(int i = 0; i < cnt; ++i){
if(abs(a[i] - x) % d){
printf("-1
");
return 0;
}
ans += abs(a[i] - x) / d;
}
cout << ans << endl;
return 0;
}