题目链接:http://codeforces.com/problemset/problem/115/B
一个人去割草。从(1,1,)开始然后只能往自己面对的方向前进,每次向下走动就会改变方向。求全部草地被清理过的最小步数。
直接模拟,一开始思路错误了,谢了很多无用的代码,查了题解发现其实就是很简单的模拟题。代码很直白。
原文;http://blog.youkuaiyun.com/u013497977/article/details/50083477
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int i,j;
char g[155][155];
for(i=0; i<n; i++)
cin>>g[i];
int x=0,y=0,s=0;
for(i=0; i<n; i++)
{
if(i%2==0)j=0;//如果是偶数行则从左边开始,否则右边
else j=m-1;
for(; j>=0 && j<m;)
{
if(g[i][j]=='W')
{
s+=abs(i-x)+abs(j-y);//距离
x=i;
y=j;
}
if(i%2==0)j++;//右移
else j--;//左移
}
}
cout<<s<<endl;
}
return 0;
}