题意:给定 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\n"); return 0; } ans += abs(a[i] - x) / d; } cout << ans << endl; return 0; }