• 1004. 西西弗斯式的命运


    Description

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

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

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

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

    二哥要花U秒( 1U1001≤U≤100 )才能走完一段上坡路,走完一段平地的耗时是F秒( 1F1001≤F≤100 ),走完一段下坡路要花D秒( 1D1001≤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;其他就一次上坡加一次下坡时间)    >= 0

    import java.util.Scanner;
     
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int M = sc.nextInt();
            int T = sc.nextInt();
            int U = sc.nextInt();
            int F = sc.nextInt();
            int D = sc.nextInt();
            char tmp;
            boolean goon = true;
            int length = 0;
            int num = 0;
            for (int i = 0; i < T; i++) {
                tmp = sc.next().charAt(0);
                if (goon) {
                    if (tmp == 'f') length += F * 2;
                    else length += U + D;
                    if (M >= length) num++;
                    else goon = false;
                }
            }
            System.out.println(num);
        }
    }

    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;
    }
  • 相关阅读:
    java.lang.RuntimeException: HRegionServer Aborted的问题
    Solr 读数据流程
    Solr 写数据流程
    solr索引创建流程
    Solr 倒排索引
    Solr 核心组成
    Solr的关键特性
    poj3308 Paratroopers --- 最小点权覆盖-&gt;最小割
    YII 路由配置
    MySQL具体解释(5)-----------函数超全总结
  • 原文地址:https://www.cnblogs.com/chenglc/p/10870069.html
Copyright © 2020-2023  润新知