Codeforces 115B Lawnmower

来源:互联网 发布:倒带和彩虹歌词知乎 编辑:程序博客网 时间:2024/05/21 07:47

题意:

给你张n*m的图,图上W表示草,G表示平地,一开始你从左上角朝右开始推草,每往下走一步朝向相反,问你最少需要走几步才能推完所有的草。

思路:

因为奇数行和偶数行的朝向是固定的,所以即使该行已经没有草了,但是由于下一行需要你还是得往前走,所以每行需要走的那一列就得由当前行和下一行的草来决定。还有如果当前行推完后已经没有草了,就没必要去下一行了,所有开个sum来记录还剩多少草。

#include<cstdio>const int MAX=155;int n,m;char mp[MAX][MAX];int main(){scanf("%d%d",&n,&m);int sum=0;for(int i=1;i<=n;i++){scanf("%s",mp[i]+1);for(int j=1;j<=m;j++){if(mp[i][j]=='W') sum++;}}int ans=0,c=1;for(int i=1;i<=n;i++){if(i%2){int t=c,num=0;for(int j=c;j<=m;j++){if(mp[i][j]=='W') t=j,num++;if(i<n&&mp[i+1][j]=='W') t=j;}sum-=num;ans+=t-c+(sum==0?0:1);c=t;}else{int t=c,num=0;for(int j=c;j>=1;j--){if(mp[i][j]=='W') t=j,num++;if(i<n&&mp[i+1][j]=='W') t=j;}sum-=num;ans+=c-t+(sum==0?0:1);c=t;}if(!sum) break;}printf("%d\n",ans);return 0;}


0 0
原创粉丝点击