codeforces#289_B Polo the Penguin and Matrix

题目地址:戳这里


其实就是利用一个很简单的高中数学题

x1<x2<x3<...<xn

f(x)=sigma |x-xi|    那么n为奇数时 取x=x(n+1)/2   当n为偶数时  取x属于 x(n/2)~ x(n/2+1)  都行

代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using   namespace  std;

int p[105][105];

int main()
{
    int n,m,d;
    cin>>n>>m>>d;

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>p[i][j];
    
    int standard=p[0][0];
    
    bool ok=1;
    
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
           if((p[i][j]-standard)%d!=0)
           {
              
               
               ok=0;
               break;
           }
    
    
    if(!ok)  cout<<-1<<endl;
    else
    {
     vector<int>  v;
      for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            v.push_back((p[i][j]-standard)/d);
    
    
    sort(v.begin(),v.end());
    
        
    
         
    int size=v.size();
 
    
    int   ans=0;
    
    
    standard=v[size/2];
    
    
    for(int i=0;i<size;i++)
        ans+=abs(v[i]-standard);
    
        
        
        cout<<ans<<endl;
        
  
    }
    
    
    
    
}


posted on 2014-03-23 18:06  814jingqi的ACM  阅读(128)  评论(0编辑  收藏  举报