Codeforces 115B

曾经终败给现在 2022-05-06 10:54 316阅读 0赞

题目地址:http://codeforces.com/problemset/problem/115/B

心里苦,越想越复杂,把空行的可能性考虑的太多了…然后发现其实就只需要一开始想的那些就够了…

70

记录左右两端杂草的位置,存在left和right数组里,因为向下走的时候方向会变,所以考虑奇偶行,k标记上一个结点。

nn用来记录走到第几行,因为可能有

GGGW

GGGG

GGGG

GGGG

这种数据,只要走一行就行了。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<iostream>
  5. #include<string>
  6. #include<algorithm>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<vector>
  11. using namespace std;
  12. #define inf 0x3f3f3f3f
  13. #define LL long long
  14. int main()
  15. {
  16. int n,nn,m,i,j,s=0;
  17. char a[200][200];
  18. int left[200],right[200];
  19. memset(left,inf,sizeof left);
  20. memset(right,-inf,sizeof right);
  21. scanf("%d %d",&n,&m);
  22. for(i=1;i<=n;i++)
  23. {
  24. scanf("%s",a[i]+1);
  25. }
  26. for(i=1;i<=n;i++)
  27. {
  28. for(j=1;j<=m;j++)
  29. {
  30. if(a[i][j]=='W')
  31. {
  32. left[i]=j;
  33. break;
  34. }
  35. }
  36. for(j=m;j>=1;j--)
  37. {
  38. if(a[i][j]=='W')
  39. {
  40. right[i]=j;
  41. break;
  42. }
  43. }
  44. }
  45. //for(i=1;i<=n;i++)
  46. //printf("%d %d\n",left[i],right[i]);
  47. nn=1;
  48. int k=1;
  49. for(i=1;i<=n;i++)
  50. {
  51. if(left[i]<=right[i])
  52. {
  53. nn=i;
  54. if(i%2==1)
  55. {
  56. s+=abs(k-left[i])+right[i]-left[i];
  57. k=right[i];
  58. }
  59. else
  60. {
  61. s+=abs(k-right[i])+right[i]-left[i];
  62. k=left[i];
  63. }
  64. }
  65. }
  66. printf("%d\n",s+nn-1);
  67. }

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读