比赛 |
20160323 |
评测结果 |
AAAAAAAAAA |
题目名称 |
定向越野 |
最终得分 |
100 |
用户昵称 |
FETS 1/3 |
运行时间 |
0.085 s |
代码语言 |
C++ |
内存使用 |
0.41 MiB |
提交时间 |
2016-03-23 19:23:22 |
显示代码纯文本
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- using namespace std;
- int L,R,n,flag;
- int a[110][110];
- int vis[110][110];
- const int dx[5]={1,-1,0,0};
- const int dy[5]={0,0,1,-1};
- void dfs(int x,int y)
- {
- if(a[x][y]<L||a[x][y]>R)
- return;
- if(x==n&&y==n)
- {
- flag=1;
- return;
- }
- int xx,yy;
- for(int i=0;i<4;i++)
- {
- xx=x+dx[i];
- yy=y+dy[i];
- if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!vis[xx][yy])
- {
- vis[xx][yy] = 1;
- dfs(xx,yy);
- }
- }
- }
- bool check(int m)
- {
- int i;
- for(i=0;i+m<=220;i++)
- {
- L=i;
- R=i+m;
- flag=0;
- memset(vis,0,sizeof(vis));
- dfs(1,1);
- if(flag)
- return true;
- }
- return false;
- }
- int binary_search(int l,int r)
- {
- int mid;
- while(l<r)
- {
- mid=(l+r)>> 1;
- if(check(mid))
- r=mid;
- else
- l=mid+1;
- }
- return r;
- }
- int main()
- {
- freopen("adven.in","r",stdin);
- freopen("adven.out","w",stdout);
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- scanf("%d",&a[i][j]);
- }
- }
- printf("%d\n",binary_search(0,220));
- return 0;
- }
-