题意

在一条路上有草地(G)(G)(G)水(W)(W)(W)和石头(L)(L)(L)。
草地:可以走也可以飞。
水:可以游也可以飞。
石头:只能飞过去。
游:每米需要3s3s3s,但能得到111耐力。
走:每米需要5s5s5s,但能得到111耐力。
飞:每米需要1s1s1s,且消耗111耐力。

然后用nnn对(类型+距离)数据描述了这段路,问你在耐力不能减为负的情况下从起点走完最小耗时。(保证肯定可以走到)

思路

可以知道:

  1. 如果飞过石头时耐力不够了,可以在之前来回走得到耐力。
  2. 如果耐力有的多可以将走或游换成飞。

于是先按照走草地游水飞石头(耐力不够来回走)算出最后剩下的耐力。
在用这些耐力依照最小需要改变一些路段的行动方式。
最小需要则可以通过当前路段到终点的石头和非石头的距离求出。
需要知道的一点是当长度为lenlenlen的一段路的运动方式改变时,多消耗的耐力是len∗2len*2len∗2。
然后可以改动的最大长度就是min(need[i]/2,length[i])min(need[i]/2,length[i])min(need[i]/2,length[i])了。

代码

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long LL;
const int Mx=1e5+5;
char Map[Mx];
int n;
LL len[Mx],nd[Mx],ans;
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&len[i]),len[i]*=2;scanf("%s",Map+1);LL ans=0,p=0,lst=1;bool hw=0;for(int i=1;i<=n;i++){switch(Map[i]){case 'G':ans+=len[i]*5,p+=len[i];break;case 'W':ans+=len[i]*3,p+=len[i],hw=1;break;case 'L':if(p>len[i])p-=len[i],ans+=len[i];else{lst=i+1;if(hw)ans+=len[i]+(len[i]-p)*3,p=0;else ans+=len[i]+(len[i]-p)*5,p=0;}}}for(int i=n;i>=lst;i--){if(Map[i]=='L')nd[i-1]=max(len[i],nd[i]+len[i]);else nd[i-1]=max(0ll,nd[i]-len[i]);}LL t=0,tmp=0;for(int i=lst;i<=n;i++){if(Map[i]=='L')t-=len[i];else t+=len[i];if(Map[i]=='G'){tmp=min(len[i]*2,t-nd[i]);if(tmp<=p){p-=tmp;ans-=tmp*2;t-=tmp;}else{ans-=p*2;return printf("%lld",ans/2),0;}}}ans-=p;printf("%lld",ans/2);
}

CF1091F New Year and the Mallard Expedition相关推荐

  1. [CF1091F](New Year and the Mallard Expedition)

    原题here 这种题肯定是不会的,只有靠膜syk神仙才会的 题意一条一维的路上有草地(Grass).山(Lava).水(Water)三种地形 Bob(一只鸭子)可以游,走,飞 游一米要3s,走要5s, ...

  2. Codeforces 1091F New Year and the Mallard Expedition

    题面 题意 有一段路要走,路一共有三种类型:草地,水,岩石,在草上可以步行,在水中可以游泳,可以在任何地形上飞,已知每走过1m要花5s但能得到1点能量,每游过1m要花3s但能得到1点能量,每飞过1m要 ...

  3. SP348 EXPEDI - Expedition(有趣的贪心,优先队列)

    SP348 EXPEDI - Expedition 1 4 4 4 5 2 11 5 15 10 25 10 2 以下来自<挑战程序设计竞赛> 以及我的辣鸡程序(竟然没超时!) #incl ...

  4. mentor公司的PCB设计软件:PADs, Expedition,BoardStation

    mentor公司算是生产PCB设计软件在 种类上最多的一家公司了吧,而且名目多,叫法也很复杂.以前用过protel.cadence.pads,现在想研究一下其他的pcb设计的东东,发现 mentor产 ...

  5. Mentor Expedition如何极坐标旋转添加器件?

    Mentor Expedition(EE)如何极坐标旋转添加器件? 我们在使用EDA工具画PCB时,常常会出现一些器件使用极坐标方式摆放器件,对于我们常见的AD.PADS.allergeo相信大家都能 ...

  6. 2019_GDUT_新生专题V算法优化 F. Expedition POJ 2431

    题目: Language: Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31110 Accepted: ...

  7. 【POJ No. 2431】 丛林探险 Expedition

    [POJ No. 2431] 丛林探险 Expedition 北大OJ 题目地址 [题意] 一群人开着一辆卡车冒险进入丛林深处,卡车油箱坏了,每走1米就会漏1升油,他们需要到最近的城镇(距离不超过10 ...

  8. 【贪心算法】poj 2431: Expedition(最优加油方法)

    题目描述(传送门) Description A group of cows grabbed a truck and ventured on an expedition deep into the ju ...

  9. 【小白爬POJ2431】3.6 探险车加油问 Expedition

    [小白爬POJ2431]3.6 探险车加油问题 Expedition 题目 Description Input Output Sample Input Sample Output Hint 思路 PO ...

最新文章

  1. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
  2. User Profile Service 服务未能登录转载自(sailing的新浪博客)
  3. 微软携手 Docker 打造 CNAB,分布式应用来了!
  4. [20150805]提升scn4.txt
  5. java long 二进制输出格式_算法:java打印int类型的二进制格式
  6. shedlock源码解析
  7. 如何快速的开发直播App
  8. 一台计算机ip地址在哪里设置密码,电脑动态IP地址怎么设置
  9. 最后一个道士 第二章
  10. python爬大学生就业信息报告_Python语言爬虫——Python 岗位分析报告
  11. 微信企业号开发(第一篇)
  12. 怎么保护PDF的文字不被复制?
  13. 因果分析系列2--随机试验
  14. 是否真的输在起跑线上?
  15. JAVA incept_关于Inception默认配置的一个坑
  16. fft函数图像横坐标是什么_FFT结果的物理意义
  17. cfiledialog对话框大小_关于 CFileDialog 对话框多选功能的一个问题
  18. 支撑百万并发的“零拷贝”技术,你了解吗?
  19. go cap和len的区别
  20. 上班族干什么副业赚钱?不知道做什么,就来看看这5个!

热门文章

  1. maven中的命令行命令
  2. Linux定时清理日志
  3. ssh 连接其他服务器
  4. 深入浅出理解视频编解码技术
  5. CSDN访问首达1W,记录一下
  6. android实现新闻内容显示功能,Android开发实现自定义新闻加载页面功能实例
  7. Android横向滚动卡片,Android仿探探卡片式滑动效果实现
  8. ansible部署LAMP架构
  9. DXP_protel2004_原理图设计基础_新建和添加原理图库文件
  10. [ 后端篇 ] 10 - AWS API 返回 Endpoint request time out