1 条题解
-
0陈烨鑫 (chenyexin) LV 10 @ 2023-4-25 20:19:22
#include <iostream> #include <iomanip> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <map> #include <algorithm> #include <queue> #include <stack> #include <cmath> #define inf 0x3f3f3f3f #define ll long long using namespace std; const int maxn=1e5+10; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int tu[600][600],n,m,vis[600][600]; struct newt { int l,r; }dian[600][600]; void dfs(int x,int y) { vis[x][y]=1; for(int i=0;i<4;i++) { int nx=x+dir[i][0],ny=y+dir[i][1]; if(nx<1||ny<1||nx>n||ny>m)continue; if(tu[x][y]<=tu[nx][ny])continue; if(!vis[nx][ny])dfs(nx,ny); //printf("%d %d %d %d\n",x,y,nx,ny); dian[x][y].l=min(dian[x][y].l,dian[nx][ny].l); dian[x][y].r=max(dian[x][y].r,dian[nx][ny].r); } } bool cmp(newt a,newt b) { if(a.l!=b.l)return a.l<b.l; else return a.r>b.r; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&tu[i][j]),dian[i][j].l=inf; for(int i=1;i<=m;i++) dian[n][i].l=i,dian[n][i].r=i; for(int j=1;j<=m;j++) if(!vis[1][j])dfs(1,j); int flag=0; for(int i=1;i<=m;i++) if(!vis[n][i]) { flag++; } if(flag) { printf("0\n%d\n",flag); } else { int bj=1,sum=0; while(bj<=m) { int Max=0; for(int i=1;i<=m;i++) if(dian[1][i].l<=bj) Max=max(dian[1][i].r,Max); sum++; bj=Max+1; } printf("1\n%d\n",sum); } return 0; }
- 1
信息
- ID
- 713
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 54
- 已通过
- 13
- 上传者