CF 115B Lawnmower(贪心)
题目链接: 传送门
Lawnmower
time limit per test:2 second memory limit per test:256 megabytes
Description
You have a garden consisting entirely of grass and weeds. Your garden is described by an n × m grid, with rows numbered 1 to n from top to bottom, and columns 1 to m from left to right. Each cell is identified by a pair (r, c) which means that the cell is located at row r and column c. Each cell may contain either grass or weeds. For example, a 4 × 5 garden may look as follows (empty cells denote grass):
You have a land-mower with you to mow all the weeds. Initially, you are standing with your lawnmower at the top-left corner of the garden. That is, at cell (1, 1). At any moment of time you are facing a certain direction — either left or right. And initially, you face right.
In one move you can do either one of these:
1) Move one cell in the direction that you are facing.
- if you are facing right: move from cell (r, c) to cell (r, c + 1)
- if you are facing left: move from cell (r, c) to cell (r, c - 1)
2) Move one cell down (that is, from cell (r, c) to cell (r + 1, c)), and change your direction to the opposite one.- if you were facing right previously, you will face left
- if you were facing left previously, you will face right
You are not allowed to leave the garden. Weeds will be mowed if you and your lawnmower are standing at the cell containing the weeds (your direction doesn't >matter). This action isn't counted as a move.
What is the minimum number of moves required to mow all the weeds?
Input
The first line contains two integers n and m (1 ≤ n, m ≤ 150) — the number of rows and columns respectively. Then follow n lines containing m characters each — the content of the grid. "G" means that this cell contains grass. "W" means that this cell contains weeds.
It is guaranteed that the top-left corner of the grid will contain grass.
Output
Print a single number — the minimum number of moves required to mow all the weeds.
Sample Input
4 5
GWGGW
GGWGG
GWGGG
WGGGG
3 3
GWW
WWW
WWG
1 1
G
Sample Output
11
7
0
解题思路:
题目大意:一块矩形草坪,除掉所有杂草,问最少需要走多少步,割草机行走规则如图。
简单贪心,考虑第一次出现草的那行向右割,之后往下向左的策略,在向右的时候必须走到本行与下一行更右位置的地方,向左的话必须走到本行与下一行更左位置的地方。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int abx(int x)
{
if (x < 0)
return -x;
else
return x;
}
int main()
{
int N,M;
while (~scanf("%d%d",&N,&M))
{
int res = 0,maxx = 0,tmp = 0;
int left[155],right[155];
char maze[155][155];
memset(left,0,sizeof(left));
memset(right,0,sizeof(right));
for (int i = 0;i < N;i++)
{
left[i] = INF;
right[i] = -INF;
scanf("%s",maze[i]);
for (int j = 0;j < M;j++)
{
if (maze[i][j] == 'W')
{
left[i] = min(left[i],j);
right[i] = max(right[i],j);
}
}
}
for (int i = 0;i < N;i++)
{
if (left[i] <= right[i])
{
maxx = i;
if (!(i&1))
{
res += abx(tmp - left[i]) + right[i] - left[i];
tmp = right[i];
}
else
{
res += abx(tmp - right[i]) + right[i] - left[i];
tmp = left[i];
}
}
}
printf("%d\n",res + maxx);
}
return 0;
}
CF 115B Lawnmower(贪心)的更多相关文章
- CF 949D Curfew——贪心(思路!!!)
题目:http://codeforces.com/contest/949/problem/D 有二分答案的思路. 如果二分了一个答案,首先可知越靠中间的应该大约越容易满足,因为方便把别的房间的人聚集过 ...
- CF Covered Path (贪心)
Covered Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- CF 389 E 贪心(第一次遇到这么水的E)
http://codeforces.com/contest/389/problem/E 这道题目刚开始想的特别麻烦...但是没想到竟然是贪心 我们只需要知道偶数的时候可以对称取的,然后奇数的时候没次取 ...
- CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树
http://codeforces.com/contest/462 A:Appleman and Easy Task 要求是否全部的字符都挨着偶数个'o' #include <cstdio> ...
- cf 之lis+贪心+思维+并查集
https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...
- 【清真dp】cf1144G. Two Merged Sequences
成就:赛后在cf使用错误的贪心通过一题 成就:在cf上赛后提交hack数据 成就:在cf上赛后hack自己 题目大意 有一长度$n \le 2\times 10^5$的序列,要求判断是否能够划分为一个 ...
- Codeforces Round #401 (Div. 2) 离翻身就差2分钟
Codeforces Round #401 (Div. 2) 很happy,现场榜很happy,完全将昨晚的不悦忘了.终判我校一片惨白,小董同学怒怼D\E,离AK就差一个C了,于是我AC了C题还剩35 ...
- CF #374 (Div. 2) D. 贪心,优先队列或set
1.CF #374 (Div. 2) D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...
- CF 628C --- Bear and String Distance --- 简单贪心
CF 628C 题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差, 两个串的dis为各个位置上字符 ...
随机推荐
- lecture2-NN结构的主要类型的概述和感知机
Hinton课程第二课 一.NN结构的主要类型的概述 这里的结构就是连接在一起的神经元.目前来说,在实际应用中最常见的NN就是前向NN,他是将数据传递给输入单元,通过隐藏层最后到输出层的单元:一个更有 ...
- Metatable让我从心认知了Lua(相知篇)
自从在公司和Lua第一次相遇之后,我的IT生涯从此也开启了另一个新篇... 起初并没有和Lua产生相遇时的那种电石火花般的怦然心动...但... 说实话虽然我的心没有因此触动但至少也不排斥...因为公 ...
- N-gram模型
n元语法 n-gram grammar 建立在马尔可夫模型上的一种概率语法.它通过对自然语言的符号串中n个符号同时出现概率的统计数据来推断句子的结构关系.当n=2时,称为二元语法,当 ...
- 探索 SharePoint 2013 Search功能
转载: http://www.cnblogs.com/OceanEyes/p/SharePont-2013-Search-Develop.html SharePoint 2013的搜索功能很强大,特别 ...
- extJs学习基础 容器的介绍
Viewport: 一个专门的容器用于可视应用领域(浏览器窗口). Viewport渲染自身到网页的documet body区域, 并自动将自己调整到适合浏览器窗口的大小,在窗口大小发生改变时自动适应 ...
- JavaScript使用自定义事件实现简单的模块化开发
WEB前端最常见驱动方式就是事件了, 所有交互等等都是通过事件,前端的常见事件有: UI事件: 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件: 现在网页上有一个输入框, 如果我 ...
- 安装findbugs
Welcome to the FindBugs Eclipse plugin update site. This web page provides automatic distribution an ...
- lucene-查询query->BooleanQuery “与或”搜索
BooleanQuery也是实际开发过程中经常使用的一种Query.它其实是一个组合的Query,在使用时可以把各种Query对象添加进去并标明它们之间的逻辑关系. BooleanQuery本身来讲是 ...
- EventBus完全解析--组件/线程间通信利器
github地址:https://github.com/greenrobot/EventBus 1, Android EventBus实战, 没听过你就out了 2, Android EventBu ...
- jquery datatable
<html><head></head> <script type="text/javascript"> $(document).re ...
You have a land-mower with you to mow all the weeds. Initially, you are standing with your lawnmower at the top-left corner of the garden. That is, at cell (1, 1). At any moment of time you are facing a certain direction — either left or right. And initially, you face right.


