Description
给出一个
n×m
的矩阵,每个格子有一个权值,一个格子如果往上、下、左、右的某个方向走到边界,其权值比遇到的所有数字权值都大,则该位置及该方向是一个赢的方向,故一个位置可能有
0
~
Input
第一行两个整数 n,m 表示矩阵行列数,之后输入一个 n×m 的矩阵 Aij(1≤n,m≤100,1≤Aij≤1000)
Output
输出赢的方向数
Sample Input
3 4
5 3 9 10
1 8 8 2
4 3 4 3
Sample Output
25
Solution
规模很小,暴力判即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=105;
int n,m,a[maxn][maxn];
int main()
{
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
int ans=0,f=0;
for(int x=1;x<=n;x++)
for(int y=1;y<=m;y++)
{
f=4;
for(int i=x-1;i;i--)
if(a[i][y]>=a[x][y])
{
f--;
break;
}
for(int i=x+1;i<=n;i++)
if(a[i][y]>=a[x][y])
{
f--;
break;
}
for(int i=y-1;i;i--)
if(a[x][i]>=a[x][y])
{
f--;
break;
}
for(int i=y+1;i<=m;i++)
if(a[x][i]>=a[x][y])
{
f--;
break;
}
ans+=f;
}
printf("%d\n",ans);
}
return 0;
}