CF115B Lawnmower

\(solution:\)

很明显的一道贪心题,奇数行只能向左走,偶数行只能向右走,每一行的起点应该在上一行就已确定,而这一行的终点只和(这一行最后一棵草(相对于你走的方向),以及下一行第一颗草的位置)。所以我们最开始保留每一行中最左边杂草的位置及最右边杂草的位置,这样枚举行时可以简单一些:(只需要将上一行的起点与这一行终点取差即可)

特殊情况:(某一行没有草时)(后面几行都没有草)(第一行如何开始)(最后一行如何结束)

  1. 没有草:只需要将这一行最左边杂草的位置及最右边杂草的位置全部赋值成上一行终点的位置即可。
  2. 后面几行都没有草:要特殊处理(详见代码中的\(f\)数组(记录每一行有没有草))
  3. \(l[0]=1;\)即可
  4. 最后一行如何结束:用\(f\)数组记录终点行即可

\(code:\)

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>#define ll long long
#define db double
#define inf 0x7fffffff
#define rg register intusing namespace std;char ch;
int n,m,s=1,k,ff=1,ans;
int l[161];//
int r[161];//最左边的杂草
bool f[161];//最右边的杂草inline int qr(){while((ch=getchar())<'0'||ch>'9');int res=ch^48;while((ch=getchar())>='0'&&ch<='9')res=res*10+(ch^48);return res;
}inline void init(){n=qr(),m=qr(); l[0]=1;//初始化for(rg i=1;i<=n;++i)l[i]=160;for(rg i=1;i<=n;++i){for(rg j=1;j<=m;++j){while((ch=getchar())!='G'&&ch!='W');if(ch=='W'){l[i]=min(l[i],j);r[i]=j;f[i]=1;}}if(!f[i])l[i]=r[i]=(i&1?l[i-1]:r[i-1]);//这一行没草,直接搬上一层的!}l[n+1]=l[n];r[n+1]=r[n];//特殊初始化
}inline void work(){for(rg i=n;i;--i)if(f[i]){ff=i;break;}for(rg i=1;i<=ff;++i,s=k){if(i&1)ans+=(k=max(r[i],r[i+1]))-s+1;else ans+=s-(k=min(l[i],l[i+1]))+1;}printf("%d\n",--ans);
}int main(){//freopen("Lawnmower.in","r",stdin);//freopen("Lawnmower.out","w",stdout);init(); work(); return 0;
}

转载于:https://www.cnblogs.com/812-xiao-wen/p/10331985.html

CF115B Lawnmower(贪心)相关推荐

  1. 训练赛一:bfs广搜题目 CF115B Lawnmower

    CF115B Lawnmower time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. CF115B Lawnmower

    题目描述 You have a garden consisting entirely of grass and weeds. Your garden is described by an n×mn×m ...

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

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

  4. Lawnmower(洛谷 CF115B)

    题目看这里 题目大意 简单来讲就是从(1,1)向左或右或下走,经过所有草坪的最短路程 思路: 由于在第一行只能向右走,那么我们就知道,在单数行和双数行分别是向右走和向左走,那么我们在单数行就只需要统计 ...

  5. HAUT2021蓝桥杯专题练习第四周记录——贪心

    HAUT2021蓝桥杯专题练习第四周记录--贪心 贪心好难啊,证明啥都不会,全程膜拜大佬555 经过这次的练习也学到了很多吧,起码一些基础的贪心就知道了,但是吧,就这周说明白了是贪心还做不出来,更别说 ...

  6. CF 115B. Lawnmower

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

  7. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  8. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  9. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

最新文章

  1. 无聊软件-GIT屏幕录制工具_已迁移
  2. 3D点云补全算法汇总及最新进展
  3. uniapp实现图片预览功能
  4. if you receive money from others
  5. idea首次创建新模块的详细操作
  6. Struts2的Action中访问servletAPI方式
  7. 一致性哈希算法及其应用
  8. JavaScript类与原型——组织JavaScript代码
  9. Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
  10. HTML 5 Canvas 绘制图形图像
  11. FSMC实现8080时序驱动SSD1963(LCD驱动芯片)--原理->编码
  12. autojs通用拾色器
  13. ps中全选图层的方法
  14. Oracle之用户、特权和角色
  15. Docker Windows Containers
  16. Debezium系列之:手动创建存放ddl database.history.kafka.topic对应的topic
  17. 用计算机怎么计算字节,计算机硬盘容量大小怎么计算
  18. Multi-UA V Cooperative Exploringfor the Unknown Indoor EnvironmentBased on Dynamic Target Tracking翻译
  19. PB控件属性之Graph
  20. 如何实现上拉加载,下拉刷新?

热门文章

  1. 彩色图像、灰度图像、二值图像和索引图像
  2. 从“受精卵”到“独角兽”,有多大概率?
  3. 实验十三:PCF8591模数传感器-数模转换实验
  4. godaddy plesk mysql 连接 2014_GoDaddy Plesk主机安装Discuz论坛需要注意的问题 | Godaddy美国主机中文指南...
  5. ATamp;T汇编格式
  6. 电机FOC中的坐标变换(CLARK+PARK+公式推导+仿真+C语言实现)
  7. KVM虚拟化之(1):CPU技术
  8. 跑步,找到自己的节奏
  9. mlp原来是这么回事
  10. S3C2440 开发板实战(8):中断驱动