[HDOJ 1008] Elevator (模拟题)
来源:互联网 发布:2017上半年理财数据 编辑:程序博客网 时间:2024/05/15 14:06
题目地址: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);}}
- [HDOJ 1008] Elevator (模拟题)
- ACM--模拟--HDOJ 1008--Elevator--水
- HDOJ 1008: Elevator
- HDOJ--1008 Elevator
- HDOJ 1008 Elevator
- HDOJ-1008 Elevator
- HDOJ 1008 Elevator
- hdoj.1008 Elevator 20140728
- HDOJ 1008 Elevator
- 【HDOJ】【1008】Elevator
- HDOJ 1008-Elevator【数学】
- HDOJ 1008 Elevator
- HDOJ 1008 Elevator
- HDOJ 1008 Elevator
- HDOJ 1008 Elevator
- HDOJ 1008 Elevator
- HDOJ 1008 Elevator
- hdoj 1008 elevator
- 数据结构复习之【栈】
- LINUX串口简明解析[修正版]
- 【转】哈佛学生是如何度过大学4年的
- [攻克存储] 掌握SDRAM/DDR的结构与寻址
- 请高手指教,如何拦截浏览器的请求URL,并把URL中的参数保存起来
- [HDOJ 1008] Elevator (模拟题)
- 内存对齐
- Java类继承:父与子的恩恩怨怨
- ubuntu下用Eclipse搭建C++开发环境
- hdu 3627
- Windows Phone7 单元测试 NUnit
- c#中split用法大全
- linux下串口通信帖子汇总
- Windows程序的框架