题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4500
本题关键是判断同性和异性,用积大于0和小于0判断,然后记录坐标就行。
开始我认定小Q是男性,就直接相加了,结果WA。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <queue>
using namespace std;
/*
freopen("input.txt", "r", stdin); //读数据
freopen("output.txt", "w", stdout); //注释掉此句则输出到控制台
*/
int xh[25][25];
int main()
{
int i,n,m,j,x1,y1,max;
while(cin>>n>>m,n&&m)
{
memset(xh,0,sizeof(xh));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&xh[i][j]);
max=-0x7f7f7f7f;//最大值初始化最小
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
int temp=0;
if(xh[i][j]*xh[i-1][j]>0)//判断是否是同性
temp-=abs(xh[i-1][j]);//同性减
else
temp+=abs(xh[i-1][j]);//异性加
if(xh[i][j]*xh[i+1][j]>0)
temp-=abs(xh[i+1][j]);
else
temp+=abs(xh[i+1][j]);
if(xh[i][j]*xh[i][j-1]>0)
temp-=abs(xh[i][j-1]);
else
temp+=abs(xh[i][j-1]);
if(xh[i][j]*xh[i][j+1]>0)
temp-=abs(xh[i][j+1]);
else
temp+=abs(xh[i][j+1]);
if(temp>max)
{//记录
max=temp;x1=i;y1=j;
}
}
cout<<x1<<" "<<y1<<" "<<max<<endl;
}
return 520;
}