比赛 20160323 评测结果 AAAAAAAAAA
题目名称 定向越野 最终得分 100
用户昵称 FETS 1/3 运行时间 0.085 s
代码语言 C++ 内存使用 0.41 MiB
提交时间 2016-03-23 19:23:22
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. using namespace std;
  6. int L,R,n,flag;
  7. int a[110][110];
  8. int vis[110][110];
  9. const int dx[5]={1,-1,0,0};
  10. const int dy[5]={0,0,1,-1};
  11. void dfs(int x,int y)
  12. {
  13. if(a[x][y]<L||a[x][y]>R)
  14. return;
  15. if(x==n&&y==n)
  16. {
  17. flag=1;
  18. return;
  19. }
  20. int xx,yy;
  21. for(int i=0;i<4;i++)
  22. {
  23. xx=x+dx[i];
  24. yy=y+dy[i];
  25. if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!vis[xx][yy])
  26. {
  27. vis[xx][yy] = 1;
  28. dfs(xx,yy);
  29. }
  30. }
  31. }
  32. bool check(int m)
  33. {
  34. int i;
  35. for(i=0;i+m<=220;i++)
  36. {
  37. L=i;
  38. R=i+m;
  39. flag=0;
  40. memset(vis,0,sizeof(vis));
  41. dfs(1,1);
  42. if(flag)
  43. return true;
  44. }
  45. return false;
  46. }
  47. int binary_search(int l,int r)
  48. {
  49. int mid;
  50. while(l<r)
  51. {
  52. mid=(l+r)>> 1;
  53. if(check(mid))
  54. r=mid;
  55. else
  56. l=mid+1;
  57. }
  58. return r;
  59. }
  60. int main()
  61. {
  62. freopen("adven.in","r",stdin);
  63. freopen("adven.out","w",stdout);
  64. scanf("%d",&n);
  65. for(int i=1;i<=n;i++)
  66. {
  67. for(int j=1;j<=n;j++)
  68. {
  69. scanf("%d",&a[i][j]);
  70. }
  71. }
  72. printf("%d\n",binary_search(0,220));
  73. return 0;
  74. }
  75.