快来吧,今天的题很有意思,代码也是!
看题!
Background
为了能逃脱姥姥的魔爪,尽快找到宁采臣,小倩在一条山路上开始了她的训练。
Description
小倩希望能在每次训练中跑得尽可能远,不过她也知道姥姥的一条规定:
女子独自进山的时间不得超过 M 秒(1≤M≤10,000,000)。
整条山路被小倩划分成 T 个长度相同的小段(1≤T≤100,000),并且,小倩用 S[i] 表示第 i 个小段的路况。S[i ]为 u,f,d 这3个字母之一,它们分别表示第 i 个小段是上坡、平地,或是下坡。
小倩要花 U 秒(1≤U≤100) 才能跑完一段上坡路,跑完一段平地的耗时是 F 秒(1≤F≤100),跑完一段下坡路要花 D 秒(1≤D≤100)。
注意,沿山路原路返回的时候,原本是上坡路的路段变成了下坡路,原本是下坡路的路段变成了上坡路。
小倩想知道,在能按时返回的前提下,她最多能在这条山路上跑多远。
Format
Input
第1行,5个用空格隔开的整数:M,T,U,F,D。
第 2到T+1 行中,第i+1行为1个字母S[i],描述了第 i 段山路的路况。
Output
输出一个整数,为小倩在按时回到的前提下,最多能跑到多远。
Samples
输入数据 1
13 5 3 2 1
u
f
u
d
f
Copy
输出数据 1
3
Copy
Hint
输入说明:
小倩跑步的最大耗时为 13 秒(这么短...),她跑步的山路一共被划成 5 段。 小倩跑完一段上坡路的耗时为 3 秒,平地为 2 秒,下坡路为 1 秒。山路各段的走向如下图所示:
输出说明:
小倩跑完山路的前 3 段,然后返回,总耗时为 3 + 2 + 3 + 1 + 2 + 1 = 123+2+3+1+2+1=12 秒,只比她能在外面呆的时限少 1 秒。如果她跑得更远,就无法按时返回。
Limitation
1s, 1024KiB for each test case.
---------------------------------------------------------------------------------------------------------------------------------
怎么样,有趣吧。
这道题是个竞赛题目,会了这道题是很有用滴😄。
耐心看下去吧,最后有彩蛋哦。
分析一下,这题要输入很多字母,建立一个char数组。
const int N=100007;
char s[N];
然后建一个time表示需要的总时间,建一个maxT表示一共能走多少段路。
int time=0;
int maxT=0;
然后一个for循环,里面来三个判断,判断s[i]是上坡、下坡还是平地和他的总时间有没有超过“姥姥的魔爪”。
上代码前先来段广告:
本题来自 沐枫oj
有兴趣的小伙伴可以去看看。
顺便提一句,我这次的代码被誉为“程序最短代码”称号,沐枫oj创始人亲自颁发哦~
废话不多说,上代码!
#include<bits/stdc++.h>
using namespace std;
const int N=100007;
char s[N];
int main(){
int k;
int n;
int a,b,c;
cin>>k>>n>>a>>b>>c;
for(int i=1;i<=n;i++)cin>>s[i];
int time=0;
int maxT=0;
for(int i=1;i<=n;i++){
if(s[i]=='u'&&(k-time)>(a+c))time+=a+c;
else if(s[i]=='f'&&(k-time)>(b*2))time+=b*2;
else if(s[i]=='d'&&(k-time)>(c+a))time+=c+a;
else break;
maxT++;
}
cout<<maxT;
}
是不是很短?好了,彩蛋来喽。
你们知道这道题的背景是怎么来的吗?
知道的请评论,让我康康。
不知道的请三连,让我康康。
揭秘答案啦:
这道题的聂小倩、姥姥和宁采臣都来自《聊斋》这本书,专门讲恐怖故事。
书里的聂小倩是一个女鬼、姥姥是一个树精、宁采臣呢?当然是个人了。
大家应该都知道,妖族和人族在故事里向来是对手,这里也是。
姥姥为了让聂小倩变强,命令她去把宁采臣抓来,吃了。但是聂小倩不想伤害宁采臣,反而想要救他(狗血剧情)。于是聂小倩就每天在山里练功、变强。但是姥姥对她很严格,让她每次必须在指定时间内回来,否则就认为她实在偷懒或是想逃跑。
所以就有了是这道题。想了解更多的话,自己去查吧……
拜拜~ヾ(•ω•`)o