zzd 的割草机(Lawnmower)
【题目描述】
已知花坛为一个 n * m 的矩形,草只会长在某些个格子上,zzd 有一个割草机,一开始,
zzd 站在(1,1)处,面向(1,m)(面向右).每次 zzd 有两个选择(耗费一个单位时间):
1:向自己面朝的方向移动一格。
2:向下移动一格,并改变自己的朝向。
但 zzd 不能向上移动,也不能后退,因为他喜欢 DP,不想有后效性.
只要 zzd 移动到有杂草的格子,zzd 会清除杂草(不需要耗时)。现在,zzd 想知道最少要耗费多少时间才能清除所有杂草。
【输入】
第一行 n,m. 接下来 n 行,每行 m 个字符,其中'W'表示杂草,'G'表示空地。
【输出】
至少要耗费多少时间才能清除所有杂草。
【样例】
Lawnmower.in
4 5
GWGGW
GGWGG
GWGGG
WGGGG
Lawnmower.out
11【数据范围】
n,m<=150
思路:
虽然zzd很喜欢DP 但是我并不知道怎么用DP做 ???
感觉是模拟啊
由题目可以知道:在奇数行 zzd的方向一定是向右的
在偶数行 zzd的方向一定是向左的
然后算出每行走到什么位置就可以了
输入的时候只要存 l[ ],r[ ] 表示每行最左边的杂草的列数 和最右边的杂草列数
再记一下每一行的总杂草数s[ ] 就可以啦
然后特别要注意特判 考虑几种特殊情况:
1.这一行没有杂草 但是下一行有
假如这一行要向左走 那么取 min的时候就会选到0了
2.这一行没有杂草 并且此时要向左走 但是下一行有
但是下一行最左边的杂草在现在所在位置的右边
如果不特判它对答案的贡献将为负
3.还有几行格子没走完 但是已经清理完所有的杂草了
直接输出答案结束程序即可
还有一个注意的点,关于统计答案的:
假如这行从 a 走到 b 那么ans+=b-a+1
后面这个+1是因为 走完这一行之后就要向下走到下一行
但是当你割最后一束杂草的时候是不需要再往下走了
所以最后的 ans 要 -1
CODE:
#include<iostream>
#include<cstdio>
#include<string>
#define go(i,a,b) for(register int i=a;i<=b;i++)
#define yes(i,a,b) for(register int i=a;i>=b;i--)
#define M 150+10
using namespace std;
int read()
{
int x=,y=;char c=getchar();
while(c<''||c>'') {if(c=='-') y=-;c=getchar();}
while(c>=''&&c<='') {x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
string s;
int n,m,ans,nw=,res,l[M],r[M],sm[M];
int main()
{
freopen("Lawnmower.in","r",stdin);
freopen("Lawnmower.out","w",stdout);
n=read();m=read();
go(i,,n)
{
cin>>s;
go(j,,m-) if(s[j]=='W') { if(!l[i]) l[i]=j+; r[i]=j+;sm[i]++;res++;}
}
go(i,,n)
{
if(i%) //奇数行
{
int right=max(r[i],r[i+]);
if(!right && i==n) right=r[i];
if(!right || right<nw) right=nw;
ans+=right-nw+;nw=right;res-=sm[i];
}
else //偶数行
{
int left=min(l[i],l[i+]);
if(!left && l[i]) left=l[i];
if(!left && l[i+]) left=l[i+];
if(!left || left>nw) left=nw;
ans+=nw-left+;nw=left;res-=sm[i];
}
if(!res) break ;
}
printf("%d",ans-);
return ;
}
zzd 的割草机(Lawnmower)的更多相关文章
- CF 115B Lawnmower(贪心)
题目链接: 传送门 Lawnmower time limit per test:2 second memory limit per test:256 megabytes Description ...
- "大哥,割草机借我用一下,我修整一下草坪。" ---- 谈谈this与JavaScript函数调用的不解之缘
在写上一篇有关apply和call的博文时(闲聊JS中的apply和call),起初我还是担心大家理解起来比较困难,因为要理解apply调用方式的前提是,至少先理解在JavaScript中函数调用是什 ...
- CF115B Lawnmower(贪心)
CF115B Lawnmower \(solution:\) 很明显的一道贪心题,奇数行只能向左走,偶数行只能向右走,每一行的起点应该在上一行就已确定,而这一行的终点只和(这一行最后一棵草(相对于你走 ...
- CF115B Lawnmower
题目描述 You have a garden consisting entirely of grass and weeds. Your garden is described by an n×mn×m ...
- 普林斯顿微积分读本 大纲与重点 (by zzd)
普林斯顿微积分读本 大纲重点 由于博客园太菜,所以我用图片上传. 当前更新状态:未完待续,挖坑暂时不填了. UPD(2018-07-08): 稍微更一下,加一个本书的某一版本下载链接:https:// ...
- Lawnmower(洛谷 CF115B)
题目看这里 题目大意 简单来讲就是从(1,1)向左或右或下走,经过所有草坪的最短路程 思路: 由于在第一行只能向右走,那么我们就知道,在单数行和双数行分别是向右走和向左走,那么我们在单数行就只需要统计 ...
- CIFAR10/CIFAR100数据集介绍
CIFAR-10/CIFAR-100数据集解析 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 CIFAR-10/CIFAR-100数据集 CIFAR-10和CIFAR-100被标记 ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
随机推荐
- 树莓派安装、卸载docker
1.下载安装脚本(官方说明的是不能使用debian的系统的安装方式安装): curl -fsSL get.docker.com -o get-docker.sh 2.安装: sudo sh get-d ...
- HttpURLConnection、HttpClient和Session
原文地址:http://www.cnblogs.com/kross/p/3615695.html 一直没弄懂Session,cookies什么的登陆验证到底是怎么回事,昨天分别用HttpURLConn ...
- Webpack简易入门教程
<!-- 其实网上关于webpack的教程已经很多了,但是本人在学习过程中发现很多教程有错误,或者写的很不全面,结果做的过程出现各种各样的问题,对新手不但不友好还会让人浪费很多不必要的时间.所以 ...
- java 循环时候当达到这个类型的极值时 会停止输出
- java super
用法: 1.子类构造器里面默认调用父类构造器 2.调用父类的属性,方法
- BZOJ5092 分割序列(贪心)
设si为该序列的异或前缀和,则显然相当于求Σmax{sj+sj^si} (i=1~n,j=0~i).从高位到低位考虑,如果该位si为1,无论sj怎么填都是一样的:如果该位si为0,则sj该位应尽量为1 ...
- php的数组转为对象
有时候数组要转为对象操作,用对象的指向操作符,有两种方法 方法一: $arr=['a'=>10,'b'=>100,'c'=>'Hello']; $obj=(Object)$arr; ...
- PHP中文字符gbk编码与UTF-8编码的转换
通常PHP中上传文件,如果文件名称有中文字符,上传之后的名称是无法写入到本地的,因为上传来的编码格式一般是UTF-8的格式,这种格式是无法给文件命名并且存储到操作系统磁盘.在写入之前需要将其转换为gb ...
- 读取Maven项目下resources目录下的配置文件(properties为例)
配置文件:xxxxx.properties a.url=******************** b.url=---------------------------------- 读取配置文件: im ...
- 九省LNOI2018退役记
立个flag不会退役. Day 0: 水一发. 大连大学的键盘敲起来就跟敲纸似的. 膜拜要进队的gqh,yxd,sjq. (都进啦2333) (高斯消元,高原反应,分麾下治……) 给我这只弱鸡烧根香. ...