2013山东省第三届ACM省赛 The Best Seat in ACM Contest

题意:计算每个座位的value值,根据坐在该座位的队伍长度与其上下左右方向的四个队伍长度比较。若该位置的队伍长度比一个方向的长度大,则权值减去长度差的绝对值;反之则加长度差的绝对值。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

int main(){

    int T;
    int N,M;
    int s[25][25];
    int v[25][25];
    int i,j;
    int a,b;
    int ma,ma_i,ma_j;
    int ca=0;
    int k;

    scanf("%d",&T);

    while(T--){
        scanf("%d%d",&N,&M);

        for(i=0;i<N;++i){
            for(j=0;j<M;++j){
                scanf("%d",&s[i][j]);
            }
        }

        memset(v,0,sizeof(v));

        for(i=0;i<N;++i){
            for(j=0;j<M;++j){
                for(k=0;k<4;++k){
                    a=i+dir[k][0];
                    b=j+dir[k][1];
                    if(a<0||b<0||a>=N||b>=M){
                        v[i][j]-=1;
                        continue;
                    }
                    if(s[a][b]>s[i][j]){
                        v[i][j]=v[i][j]+(s[a][b]-s[i][j]);
                    }
                    else{
                        v[i][j]=v[i][j]-(s[i][j]-s[a][b]);
                    }
                }
            }
        }

        ma=v[0][0];
        ma_i=0;
        ma_j=0;
        for(i=0;i<N;++i){
            for(j=0;j<M;++j){
                if(v[i][j]>=ma){
                    ma=v[i][j];
                    ma_i=i;
                    ma_j=j;
                }
            }
        }

        printf("Case %d: %d %d %d\n",++ca,ma,ma_i+1,ma_j+1);
    }

    return 0;
}

你可能感兴趣的:(2013山东省第三届ACM省赛 The Best Seat in ACM Contest)