西西弗斯式的命运

http://acm.sjtu.edu.cn/OnlineJudge/problem/1004


Description

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

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

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

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

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

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

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

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秒,如果他跑得更远,就无法按时回到起点。


*************************************************************************************************************************

用两个数组来保存去到i 段是用的秒数,和从第i段回来用的秒数。

这道题比较简单,就直接上代码了

#include <iostream>
#include <string>
using namespace std;


int main()
{
	unsigned int M;     //最去回秒数
	unsigned int T;     //山路段数
	unsigned int U;     //上坡秒数
	unsigned int F;     //平路秒数
	unsigned int D;     //下坡秒数
	char road;
	cin>>M>>T>>U>>F>>D;
	unsigned int *go = new unsigned int[T];
	unsigned int *back = new unsigned int[T];
	for(unsigned int i = 0 ; i< T; i ++)
	{
		go[i] = 0;
		back[i] = 0;
	}
	for(unsigned int i = 0; i < T; i++)
	{
		cin>>road;
		switch(road)
		{
		case 'u':
			if(0 == i)
			{
				go[i] = U;
				back[i] = D;
			}
			else
			{
				go[i] = U + go[i-1];
				back[i] = D + back[i-1];
			}
			break;
		case 'f':
			if(0 == i)
			{
				go[i] = F;
				back[i] = F;
			}
			else
			{
				go[i] = F + go[i-1];
				back[i] = F + back[i-1];
			}
			break;
		case 'd':
			if(0 == i)
			{
				go[i] = D;
				back[i] = U;
			}
			else
			{
				go[i] = D + go[i-1];
				back[i] = U + back[i-1];
			}
			break;
		}
	}

	int j = 0;
	while((go[j]+back[j]) <= M && j < T)
	{j++;}

	cout<<j;

	return 0;
}

时间:0ms / 内存:48024kb



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
知识总结 1 一、整除的性质: 3 二、数的整除特征 3 三、奇偶的性质 4 四、模p运算 4 五、同余的性质 4 六、余数检验 5 七、素数 6 八、素数的检验 7 九、最大公约数 8 十、算术基本定理 9 十一、一些数论的定理 9 十二、二次剩余 9 十三、梅森数 10 十四、完全数 11 十五、费马数 12 十六、完全平方数 12 十七、水仙花数 13 十八、西西弗斯数 13 十九、高度合成数 13 二十、斐波那契数 13 二十一、亲和数 14 二十二、欧拉数 14 二十三、欧拉的其他公 15 二十四、欧拉方程 15 二十五、勾股数的特点 16 二十六、勾股数系的系和组 17 二十七、勾股数系的性质 17 二十八、二元一次不定方程 18 二十九、中国同余 18 三十、数列 18 三十一、常识 19 三十二、幻方 19 三十三、克拉茨命题 20 三十三、用牛顿叠代法求高精度倒数 21 三十四、用二分法求解n! 21 三十五、高精度求乘幂 21 三十六、高精度求实数乘幂 22 三十七、高精度求对数 23 三十八、乘法的快速傅立叶转换 23 三十九、FFT 乘法 24 四十、高精度求开方 25 四十一、对原函数进行高精度求解 26 四十二、巴什博奕(Bash Game): 27 四十三、威佐夫博奕(Wythoff Game): 27 四十四、尼姆博奕(Nimm Game): 28 四十五、取火柴游戏 29 四十六、取硬币游戏 30 四十七、分金币 30 四十八、三人行游戏 31 四十九、3个教士和3个土人 31 五十、分酒问题 32 五十一、砝码 33 五十二、杨辉三角 34 五十三、图论的一些定理: 37 五十四、二部图 38 五十五、排列组合问题 39 五十六、计数问题 39 五十七、微积分公 41 五十八、三角函数公 43 五十九、空间解析几何和向量代数: 44 六十、多元微积分 44 六十一、多元函数微分法及应用 47 六十二、微分法在几何上的应用: 48 六十三、级数: 49 六十四、微分方程: 52 六十五、数学常用公 53 六十六、二维图形的周长与面积公 56 六十七、程序 58

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值