记录编号 256482 评测结果 AAAAAAAAAA
题目名称 [USACO Jan09] 激光电话 最终得分 100
用户昵称 Gravatar521 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-04-30 19:09:05 内存使用 0.00 MiB
显示代码纯文本
  1. #include<stdio.h>
  2. int dp[102][102]={0};
  3. char a[102][102]={0};
  4. int min(int x,int y){return x<y?x:y;}
  5. int _521()
  6. {
  7. freopen("lphone.in","r",stdin);
  8. freopen("lphone.out","w",stdout);
  9. int i,j,n,m,temp=1,x,y,_x,_y;
  10. bool flag=true;
  11. scanf("%d%d",&m,&n);
  12. for(i=1;i<=n;i++)
  13. {
  14. getchar();
  15. for(j=1;j<=m;j++)
  16. {
  17. dp[i][j]=100000;
  18. scanf("%c",&a[i][j]);
  19. if(a[i][j]=='C'&&flag)
  20. a[i][j]='.',dp[i][j]=1,flag=false;
  21. if(a[i][j]=='C'&&!flag)
  22. _x=i,_y=j,a[i][j]='.';
  23. }
  24. }
  25. while(1)
  26. {
  27. for(i=1;i<=n;i++)
  28. for(j=1;j<=m;j++)
  29. {
  30. if(dp[i][j]==temp)
  31. {
  32. x=i-1,y=j;
  33. while(a[x][y]=='.')
  34. dp[x][y]=min(dp[x][y],temp+1),x--;
  35. x=i+1,y=j;
  36. while(a[x][y]=='.')
  37. dp[x][y]=min(dp[x][y],temp+1),x++;
  38. x=i,y=j-1;
  39. while(a[x][y]=='.')
  40. dp[x][y]=min(dp[x][y],temp+1),y--;
  41. x=i,y=j+1;
  42. while(a[x][y]=='.')
  43. dp[x][y]=min(dp[x][y],temp+1),y++;
  44. }
  45. }
  46. if(dp[_x][_y]!=100000) break;
  47. temp++;
  48. }
  49. printf("%d\n",dp[_x][_y]-2);
  50. }
  51. int _520=_521();
  52. int main(){;}