[HDOJ 1008] Elevator (模拟题)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1008

 这个题目的难点在于如何理解Sample Input里的两个数17和41

起初我没理解题目真正的意思,以为每到一层都会停一下,所以第一个输入1 2 我理解成0->1 +6 停一下+5  1->2 +6 ,这样一算刚好是17。

但是根据这样的思路再来算3  2  3  1,结果是46了,我在Discuss里面看到也有人跟我一样的想法,怎么算都是46,于是就卡壳了,无法继续。

后来在Discuss里面看到一个提示,电梯只在输入的那几个目标层停,中间层不停。到达最后一层后也会停5秒。这样再一算,完全吻合了。0->2:  2*6+5, 2->3:  1*6+5,  3->1:  2*4+5   = 41

54689462012-03-04 21:01:39Accepted10080MS284K520 BC++ajioy
#include <iostream>
using namespace std;
int main()
{
 const int UP = 6; 
 const int DOWN = 4;
 const int STOP = 5;
 int nCase,floor;
 while(cin >> nCase && nCase){
  int sec = 0,tmp;
  //第一个目标层是由第0层出发,较特殊,单独算 
  cin >> floor; 
  tmp = floor;
  sec = floor * UP + STOP; //由0层出发到第一个目标层所有时间 
   for(int i = 1; i < nCase; ++i){
     cin >> floor;
     if(floor > tmp) //如果电梯往上 
     sec += (floor - tmp) * UP + STOP; 
     else  //电梯往下 
     sec += (tmp - floor) * DOWN + STOP;
     tmp = floor;//记录本次目标层,方便下一个目标层的计算 
   }
   cout << sec << endl;
 }
}

网友精简版:
#include <stdio.h>
int main()
{
	int n,a,c,s;
	while(~scanf("%d",&n),n) {
		s = c = 0;
		while(n--) {
			scanf("%d",&a);
			s += (a > c? (a - c) * 6 + 5: (c - a) * 4 + 5);
			c = a;
		}
		printf("%d\n",s);
	}
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值