记录编号 | 190916 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [UVa 10285] 最长滑坡 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.458 s | ||
提交时间 | 2015-10-05 11:29:57 | 内存使用 | 2.55 MiB | ||
#include<cstdio> #include<deque> #include<cstring> #include<iostream> using namespace std; const int SIZEN=510; int N,M,f[SIZEN][SIZEN]={0},mp[SIZEN][SIZEN],dx[]={0,0,1,-1},dy[]={-1,1,0,0}; bool inq[SIZEN][SIZEN]={0}; class miku { public: int x,y; int& val() { return f[x][y]; } bool& iq() { return inq[x][y]; } int high() { return mp[x][y]; } }; deque<miku> Q; void read() { scanf("%d%d",&N,&M); for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) { scanf("%d",&mp[i][j]); f[i][j]=1; } for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) { miku S; S.x=i;S.y=j;S.val()=1;S.iq()=1; Q.push_back(S); } } void check(miku a,miku b) { if(a.x==0||a.y==0||a.x==N+1||a.y==M+1) return; if(a.high()<b.high()&&b.val()+1>a.val()) { a.val()=b.val()+1; if(!a.iq()) { a.iq()=1; Q.push_back(a); } } } void work() { miku T,S; while(!Q.empty()) { S=Q.front();Q.pop_front();S.iq()=0; for(int i=0;i<4;i++) { T=S; T.x+=dx[i];T.y+=dy[i]; check(T,S); } } int ans=0; for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) { if(f[i][j]>ans) ans=f[i][j]; } printf("%d",ans); } int main() { freopen("shunzhi.in","r",stdin); freopen("shunzhi.out","w",stdout); read(); work(); return 0; }