#include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> #include<iostream> #include<string> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) #define MP(x,y) make_pair(x,y) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;} template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;} const int N=105,M=0,Z=1e9+7,ms63=1061109567; const int dy[4]={-1,0,0,1}; const int dx[4]={0,-1,1,0}; int casenum,casei; int n,m; int a[N][N]; void fre() { freopen("lucky.in","r",stdin); freopen("lucky.out","w",stdout); } int main() { fre(); 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; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=0;k<4;k++) { int y=i+dy[k]; int x=j+dx[k]; bool flag=1; while(y>=1&&y<=n&&x>=1&&x<=m) { if(a[y][x]>=a[i][j]) { flag=0; break; } y+=dy[k]; x+=dx[k]; } ans+=flag; } } } printf("%d\n",ans); } return 0; } /* 【题意】 给你一个n(100)*m(100)的棋盘,每个点有一个权值 问你有多少个(点,方向),使得这个点,从这个方向出发,一直在棋盘内延展,走到的点的权值都比这个点的权值要小。 并输出 【类型】 水题 【分析】 直接暴力即可 【时间复杂度&&优化】 O(nmnm) */