题目大意:

n*m的草地,有些地方是有杂草的,需要你把杂草除掉,并且尽可能地使路径最短。
有以下规则:

  1. 向你面向的方向移动一个单元格
  2. 跳到下一行时方向改变(比如你在i行是朝左边,那么到i+1行就朝向右)

数据大小:

1<=n,m<=150

思路:

可以模拟来做,注意到其实每一行的方向是确定的!奇数向右,偶数向左
然后有以下几种情况:
1.当前行和下一行有杂草
2.当前行和下一个有杂草的行之间有奇数个空行
3.当前行和下一个有杂草的行之间有偶数个空行
然后记录最后有杂草的行end,加上每一行所需要的走的最少步数,就是答案。
代码有点绕,慢慢看

#include <iostream>
#include <cstdio>
#include<cstring>
using namespace std;
#define MAX 155
struct Node{int r,l;
};
int n,m,End,ans,vis;
int main()
{int x = 0;Node temp,a;scanf("%d %d",&n,&m);for(int i = 1;i <= n;i++){getchar();int flag = 0;//标注当前行是否有草char ch;for(int j = 0;j<m;j++){ch = getchar();if(ch == 'W'){if(flag){a.r = j;}else{a.l = j;a.r = j;}flag = 1;End = i-1;//有杂草的最后一行}}if(flag){if(!vis){if(x)//有空行的操作{if(x%2)//<--(奇数个空行){ans+=a.r;}else//-->(偶数个空行){a.l = 0;}}else//-->{ans+=a.l;}temp = a;x = 0;vis = 1;}else{if(x == 0 || x%2 == 0){if(i%2)//-->{a.l = min(temp.l,a.l);ans+=temp.r-a.l;temp = a;}else// <--{a.r = max(temp.r,a.r);ans+=a.r-temp.l;temp = a;}}else if(x%2){if(i%2)//-->{ans+=temp.r-temp.l;if(temp.r > a.l)ans+=temp.r-a.l;elseans+=a.l-temp.r;temp = a;}else//<--{ans+=temp.r-temp.l;if(temp.l < a.r)ans+=a.r-temp.l;elseans+=temp.l-a.r;temp = a;}}x = 0;}}else x++;//x记录空行的数量}if(vis)ans+=temp.r-temp.l;printf("%d",ans+End);return 0;
}

Lawnmower E题相关推荐

  1. 为什么需要api产品经理

    It is very possible that your company is doing APIs wrong. Your organization may conflate REST with ...

  2. CF115B Lawnmower(贪心)

    CF115B Lawnmower \(solution:\) 很明显的一道贪心题,奇数行只能向左走,偶数行只能向右走,每一行的起点应该在上一行就已确定,而这一行的终点只和(这一行最后一棵草(相对于你走 ...

  3. CF 115B. Lawnmower

    CF 115B. Lawnmower  http://www.codeforces.com/problemset/problem/115/B 贪心.由于每次必须将整行的走完,而且不能变换方向,由此可知 ...

  4. 牛年前的一小结——打响本命年的第一枪,继续刷题!

    经过一段时间的小尝试,摸索出了一点点头儿吧. 总结一下子. 关于面试的java,像我这个经验层次(1-2year普通厂)的都不会太难.最多超不出力扣中等难度. 多练习链表.树.指针类的比较基础的题目: ...

  5. 快起床刷题去,别人把你offer拿走啦

    好久没有上力扣刷题咯,又到了关键的时刻,却忘得零零散散,囧~ 话说,刷题.学算法.常用,这些技能才能长在身上! 上一道刚刚遇到的正菜~ 题:给定一个整数数组 nums 和一个目标值 k,请实现一个方法 ...

  6. LeetCode简单题之删除字符使字符串变好

    题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...

  7. LeetCode中等题之区域和检索 - 数组可修改

    题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...

  8. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  9. LeetCode简单题之Excel 表中某个范围内的单元格

    题目 Excel 表中的一个单元格 (r, c) 会以字符串 "" 的形式进行表示,其中: 即单元格的列号 c .用英文字母表中的 字母 标识. 例如,第 1 列用 'A' 表示, ...

最新文章

  1. key的数据类型是字符串
  2. boost::type_erasure::typeid_of相关的测试程序
  3. Vuejs开发环境搭建及热更新
  4. 刚刚上班才回来,今天和你说说hash数组
  5. ubuntu下编译OpenGL
  6. tomcat登录账户配置
  7. python量化交易通达信_分享一个可以实战的量化交易策略(适用于通达信系统)...
  8. jmeter使用方法和功能
  9. nali命令--输出IP地址显示地理信息
  10. 时间序列分析——python
  11. c语言李白喝酒答案,思维的体操——李白喝酒(2014年春蓝桥杯个人赛)
  12. 《StereoDRNet: Dilated Residual StereoNet》
  13. 南京大学计算机技术是重点学科吗,2019南京大学重点学科和重点专业大盘点
  14. Eclipse 导入maven项目报 Unknown Faceted Project Problem (Java Version Mismatch) 问题解决
  15. 大数据人工智能ai培训师专家讲师叶梓介绍及ChatGPT提纲
  16. 推荐一个学习SQL的好网站
  17. wicket学习笔记(2):简单登陆页面的创建
  18. 大数据分析案例-基于多元线性回归算法构建用户信用评分模型
  19. 贵州师范大学本科毕业论文答辩和论文选题PPT模板
  20. 前言 —— 广告那些事儿

热门文章

  1. R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
  2. PHP include 和 include_once 的区别
  3. Linux内核编译依赖
  4. 利用 Global mapper制作地图瓦片
  5. autoconf 报错
  6. 可以免费自学编程的12个网站,祝你达巅峰
  7. 四、Testbench
  8. 计算机表格数字整体加,excel表格整体数据加1怎么处理-怎样才可以在EXCEL表格的数字中全部加1??...
  9. 第四十七章 SQL命令 GRANT(一)
  10. 医学统计分析:心电图智能诊病