列表

详情


NC14417. 割草机

描述

有一块n*m的地,每块地要么长满杂草(用'W'表示),要么是空地(用'G'表示),现在有一个人站在(1,1),面向(1,m),他可以按如下两种方式移动:

1、向面朝的方向移动一格,耗费1单位时间

2、向下移动一格,并反转面朝的方向(右变左,左变右),耗费1单位时间

现在他想知道清除所有的杂草最少需要多少单位时间(清除完杂草之后不用返回(1,1))

输入描述

第一行n,m
接下来n行每行一个字符串表示矩阵。
n,m<=150

输出描述

一行一个整数表示答案。

示例1

输入:

4 5
GWGGW
GGWGG
GWGGG
WGGGG

输出:

11

示例2

输入:

3 3
GWW
WWW
WWG

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 412K, 提交时间: 2023-06-28 11:16:52

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;cin>>n>>m;
    string a;
    long long ans=0;
    int q=0;int w=0;
   for(int i=0;i<n;i++){
       cin>>a;
       if(i%2!=0){
           for(int j=m-1;j>=0;j--){
              if(a[j]=='W') {ans+=abs(q-j);ans+=abs(w-i);w=i;q=j;}
           }
       }else {
           for(int j=0;j<m;j++){
               if(a[j]=='W') {ans+=abs(q-j);ans+=abs(w-i);w=i;q=j;}
           }
       }
   }
    cout<<ans;
}

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2023-07-25 14:14:28

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,ans=0;
	cin>>n>>m;
	string s;
	bool f=1;
	int x=0,y=0;
	for(int i=0;i<n;i++){
		cin>>s;
		if(f)
		{
			for(int j=0;j<m;j++){
				if(s[j]=='W'){
					ans+=abs(i-x)+abs(j-y);
				    x=i,y=j;
				}
			}
		}
		else
		{
			for(int j=m-1;j>=0;j--){
				if(s[j]=='W'){
					ans+=abs(i-x)+abs(j-y);
				    x=i,y=j;
				}
			}
		}
		f=!f;
	}
	cout<<ans<<endl;
	return 0;
}

上一题