CodeForces 289B--中位数

来源:互联网 发布:智能问答可编辑软件 编辑:程序博客网 时间:2024/05/01 22:44

题意:

一个n * m的矩阵,将该矩阵的元素经过加或者减一个固定的数字 d,使得该矩阵的所有元素全部相等,问运算的最小步骤?若不能做到

则输出-1。


输入:

2 2 22 46 8
1 2 76 7

输出:

4

-1


分析:

将矩阵的所有元素全部排序,找到中位数,将所有的数字向中位数靠拢,如果各元素对d的取余不相等,那么输出-1.当时做的时候,

因为-1的条件没找对,错了好几次。


代码:

#include <bits/stdc++.h>using namespace std;int main(){    int n,m,d,a[10005],ans=0;    cin >>n>>m>>d;    for(int i=0;i<n*m;i++)    {        cin >>a[i];    }    int c=a[0]%d;    sort(a,a+n*m);    for(int i=0;i<n*m;i++)    {        if(a[i]%d!=c)        {            cout <<-1<<endl;            return 0;        }        else            ans+=abs(a[i]-a[(n*m-1)/2]);    }    cout <<ans/d<<endl;    return 0;}


0 0