题意:有一个矩形,由正负整数构成。一个位子的魅力值为相邻的格子,若与邻格同号则减去绝对值,若异号则加上绝对值。
思路:一个格子一个格子计算即可,没什么好说的。
见代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,m,max0=-0x3f3f3f,max1,max2,a[505][505],b[505][505],c[5]={0,-1,1,0,0},d[5]={0,0,0,-1,1}; bool flag[505][505]; int main() { freopen("reven.in","r",stdin); freopen("reven.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>a[i][j]; if(a[i][j]>0) flag[i][j]=true; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { for(int k=1;k<=4;k++) { if(a[i+c[k]][j+d[k]]!=0) { if(flag[i+c[k]][j+d[k]]!=flag[i][j]) { b[i][j]+=abs(a[i+c[k]][j+d[k]]); } else b[i][j]-=abs(a[i+c[k]][j+d[k]]); } } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(b[i][j]>max0) { max0=b[i][j]; max1=i; max2=j; } } cout<<max1<<" "<<max2<<" "<<max0; return 0; }