Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
150964 | lrf820215 | 引水入城 | C++ | 解答错误 | 30 | 49 MS | 11788 KB | 1464 | 2024-06-10 10:18:39 |
#include<bits/stdc++.h> using namespace std; const int dx[5]={0,0,-1,+1}; const int dy[5]={-1,+1,0,0}; int n,m; int b[510][510],a[510][510],op1[510][510],op2[510][510]; void dfs(int x,int y) { b[x][y]=1; for(int i=0;i<4;i++) { int xx=dx[i]+x; int yy=dy[i]+y; if(a[x][y]<=a[xx][yy]||xx<1||xx>n||yy<1||yy>m) continue; if(!b[xx][yy]) dfs(xx,yy); op1[x][y]=min(op1[xx][yy],op1[x][y]); op2[x][y]=max(op2[xx][yy],op2[x][y]); } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } memset(op1,10,sizeof(op1)); for(int i=1;i<=m;i++) { op2[n][i]=op1[n][i]=i; } for(int i=1;i<=m;i++) { if(!b[1][i]) { dfs(1,i); } } int cnt=0; for(int i=1;i<=m;i++){ if(!b[n][i]) { cnt++; } } if(cnt){ cout<<0<<endl<<cnt; } else { int l=1; int ans=0; while(l<=m) { int maxx=0; for(int i=1;i<=m;i++) { if(op1[1][i]<=l) { maxx=max(maxx,op2[1][i]); } } ans++; l=maxx+1; } cout<<l<<endl<<ans; } }