• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dwtfukgv
博客园    首页    新随笔    联系   管理    订阅  订阅
CodeForces 289B Polo the Penguin and Matrix (数学,中位数)

题意:给定 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;
}

 

posted on 2016-07-25 21:23  dwtfukgv  阅读(194)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3