上交OJ-1004. 西西弗斯式的命运

1004. 西西弗斯式的命运


Description

古希腊有个关于西西弗斯的神话:

西西弗斯被众神判决推运一块石头至山顶。由于巨石本身的重量,它被推到山顶却又总要滚下山脚。于是西西弗斯又得把石块推上山去。如此反复,永无止境,没有尽头。众神认为,让西西弗斯服这永恒的劳役是最严酷的惩罚。

二哥被押入地狱。他被众神判决扛着一块巨砖在山路上走,再原路返回,如此反复,没有尽头。

众神规定二哥独自走山路的时间不得超过M秒( 1≤M≤10,000,000 )。整条山路被划分成T个长度相同的小段( 1≤T≤100,000 ),并且,众神用Si表示第i个小段的路况。Si为u,f,d这3个字母之一,它们分别表示第i个小段是上坡、平地、下坡。

二哥要花U秒( 1≤U≤100 )才能走完一段上坡路,走完一段平地的耗时是F秒( 1≤F≤100 ),走完一段下坡路要花D秒( 1≤D≤100 )。注意,沿山路原路返回的时候,原本是上坡的路段变成了下坡路,原本是下坡的路段变成了上坡路。

二哥对生活充满激情,但他遭受着难以用言语尽述的非人折磨:痛苦扭曲的脸,被巨砖死死压住的抖动的肩膀,沾满泥土的双脚,呕心沥血,不停的工作。这是典型的西西弗斯式的命运。贝多芬,歌德,叔本华,你才,还有高斯,爱因斯坦的命运,都是典型的西西弗斯式的命运,无一例外。

众神想让二哥能在按时返回的前提下,走最远的路。所以众神向知道他最多能在这条山路上走多远。

Input Format

第1行:5个空格隔开的整数:M,T,U,F,D。

第2..T+1行:第i+1行有一个字母Si,描述第i段山路的路况。

Output Format

一行,有一个整数为二哥在按时回到起点前提下,最多能跑到多远。

Sample Input

13 5 3 2 1
u
f
u
d
f

Sample Output

3

样例解释
众神规定二哥的最大耗时为13秒,他跑步的山路一共被划分成5段。二哥走完一段上坡的耗时为3秒,平地为2秒,下坡为1秒。

二哥走完山路的前3段,然后返回,总耗时为3+2+3+1+2+1=12秒,如果他跑得更远,就无法按时回到起点。

分析

这道题其实很简单,就是计算从起点开始在规定时间内走最长距离。
然后最佳思路是,每输入一个就进行2,u或d则U+D,f则F2。
但我开始用C实现,getchar和scanf都会涉及字符输入会有换行问题,而且不知道内部输入是否有换行,最后使用C++实现:

#include <iostream>

using namespace std;

int main()
{
    int M,T,U,F,D;
    int length=0;
    char tmp;
    int i;
    int num=0;
    int flag=0;
    cin>>M>>T>>U>>F>>D;
    for(i=0;i<T;i++) {
        cin>>tmp;
        if(!flag) {
            if(tmp=='f') length+=F*2;
            else length+=U+D;
            if(M>=length) num++;
            else flag=1;
        }
    }
    cout<<num;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一 刚上高中的我,虽然胸部还是平平的没有发育,可是已经拥有了一头完美的黑色短发,因此大家都叫我黑发少女。作为黑发少...
    城外42阅读 715评论 10 13
  • 孩子下午矫牙后回家,一下午都在玩IPAD,作业几乎没动。因为是和爸爸商量好,这两周是调整阶段,估计孩子会很...
    记得祝福阅读 157评论 0 1
  • 为规范辖内支付机构的支付业务活动,严肃支付结算纪律,促进支付市场健康有序发展,隆安县支行根据《中国人民银行南宁中心...
    单剪阅读 246评论 0 1