sdut 2617 矩阵(sdut第五届校赛)

来源:互联网 发布:如何导出淘宝数据包 编辑:程序博客网 时间:2024/05/22 19:26

题目链接:点击打开链接

题目大意:

给定一个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";        else        cout<<sum<<endl;    }    return 0;}</span>


1 0