CF1091F New Year and the Mallard Expedition
题意
在一条路上有草地(G)(G)(G)水(W)(W)(W)和石头(L)(L)(L)。
草地:可以走也可以飞。
水:可以游也可以飞。
石头:只能飞过去。
游:每米需要3s3s3s,但能得到111耐力。
走:每米需要5s5s5s,但能得到111耐力。
飞:每米需要1s1s1s,且消耗111耐力。
然后用nnn对(类型+距离)数据描述了这段路,问你在耐力不能减为负的情况下从起点走完最小耗时。(保证肯定可以走到)
思路
可以知道:
- 如果飞过石头时耐力不够了,可以在之前来回走得到耐力。
- 如果耐力有的多可以将走或游换成飞。
于是先按照走草地游水飞石头(耐力不够来回走)算出最后剩下的耐力。
在用这些耐力依照最小需要改变一些路段的行动方式。
最小需要则可以通过当前路段到终点的石头和非石头的距离求出。
需要知道的一点是当长度为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相关推荐
- [CF1091F](New Year and the Mallard Expedition)
原题here 这种题肯定是不会的,只有靠膜syk神仙才会的 题意一条一维的路上有草地(Grass).山(Lava).水(Water)三种地形 Bob(一只鸭子)可以游,走,飞 游一米要3s,走要5s, ...
- Codeforces 1091F New Year and the Mallard Expedition
题面 题意 有一段路要走,路一共有三种类型:草地,水,岩石,在草上可以步行,在水中可以游泳,可以在任何地形上飞,已知每走过1m要花5s但能得到1点能量,每游过1m要花3s但能得到1点能量,每飞过1m要 ...
- SP348 EXPEDI - Expedition(有趣的贪心,优先队列)
SP348 EXPEDI - Expedition 1 4 4 4 5 2 11 5 15 10 25 10 2 以下来自<挑战程序设计竞赛> 以及我的辣鸡程序(竟然没超时!) #incl ...
- mentor公司的PCB设计软件:PADs, Expedition,BoardStation
mentor公司算是生产PCB设计软件在 种类上最多的一家公司了吧,而且名目多,叫法也很复杂.以前用过protel.cadence.pads,现在想研究一下其他的pcb设计的东东,发现 mentor产 ...
- Mentor Expedition如何极坐标旋转添加器件?
Mentor Expedition(EE)如何极坐标旋转添加器件? 我们在使用EDA工具画PCB时,常常会出现一些器件使用极坐标方式摆放器件,对于我们常见的AD.PADS.allergeo相信大家都能 ...
- 2019_GDUT_新生专题V算法优化 F. Expedition POJ 2431
题目: Language: Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31110 Accepted: ...
- 【POJ No. 2431】 丛林探险 Expedition
[POJ No. 2431] 丛林探险 Expedition 北大OJ 题目地址 [题意] 一群人开着一辆卡车冒险进入丛林深处,卡车油箱坏了,每走1米就会漏1升油,他们需要到最近的城镇(距离不超过10 ...
- 【贪心算法】poj 2431: Expedition(最优加油方法)
题目描述(传送门) Description A group of cows grabbed a truck and ventured on an expedition deep into the ju ...
- 【小白爬POJ2431】3.6 探险车加油问 Expedition
[小白爬POJ2431]3.6 探险车加油问题 Expedition 题目 Description Input Output Sample Input Sample Output Hint 思路 PO ...
最新文章
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- User Profile Service 服务未能登录转载自(sailing的新浪博客)
- 微软携手 Docker 打造 CNAB,分布式应用来了!
- [20150805]提升scn4.txt
- java long 二进制输出格式_算法:java打印int类型的二进制格式
- shedlock源码解析
- 如何快速的开发直播App
- 一台计算机ip地址在哪里设置密码,电脑动态IP地址怎么设置
- 最后一个道士 第二章
- python爬大学生就业信息报告_Python语言爬虫——Python 岗位分析报告
- 微信企业号开发(第一篇)
- 怎么保护PDF的文字不被复制?
- 因果分析系列2--随机试验
- 是否真的输在起跑线上?
- JAVA incept_关于Inception默认配置的一个坑
- fft函数图像横坐标是什么_FFT结果的物理意义
- cfiledialog对话框大小_关于 CFileDialog 对话框多选功能的一个问题
- 支撑百万并发的“零拷贝”技术,你了解吗?
- go cap和len的区别
- 上班族干什么副业赚钱?不知道做什么,就来看看这5个!