草是'W'。难点是很容易漏情况。
input
4 5 GWGGW GGWGG GWGGG WGGGG
output
11
![](https://i-blog.csdnimg.cn/blog_migrate/afcc27de40207f099019096f8010f11f.png)
#include<bits/stdc++.h>
using namespace std;
string x[155];
int y[155];
int z[155];
int main(){
int n,m;
cin>>n>>m;
int s=0,w=0;
for(int i=0;i<n;++i){
cin>>x[i];
int g=-1;
for(int j=0;j<m;++j){
if(x[i][j]=='W')
g=j;
}
y[i]=g;
g=1000000000;
for(int j=m-1;j>=0;--j){
if(x[i][j]=='W')
g=j;
}
z[i]=g;
if(g!=1000000000)
w=i+1; //有效行数
}
if(w==0){ //特判,最后不用-1
cout<<0<<endl;
return 0;
}
int h=0,i;
for(i=0;i<w-1;++i){ //最后一行不用管下一行,特判
if(i%2==0){
if(max(y[i+1],y[i])==-1) continue; //这行和下行都是G,不动
s+=abs(max(y[i+1],y[i])-h); //注意加abs ! 这行要走的最右边比上行最后(暂时)位置靠左/靠右
cout<<0<<" "<<max(y[i+1],y[i])<<" "<<h<<endl;
h=max(y[i+1],y[i]);
}
else{
if(min(z[i+1],z[i])==1000000000) continue;
s+=abs(h-min(z[i+1],z[i]));
cout<<1<<" "<<h<<" "<<min(z[i+1],z[i])<<endl;
h=min(z[i+1],z[i]);
}
}
if(i%2==0){
s+=y[i]-h;
}
else{
s+=h-z[i];
}
cout<<w-1+s<<endl;
}
/*
7 5
WGGGG
GGGGG
WWWGW
GGGGG
GGGGG
GGGWG
WGGWW
0 0 0
1 0 0
0 4 0
0 3 4
1 3 0
16(18)
7 5
GGGGG
GGGGG
GWWGG
GWWGW
WGGGG
WGGWG
WWGWG
1 0 1
0 4 1
1 4 0
0 3 0
1 3 0
21(23)
*/