hdu 4505 小Q系列故事——电梯里的爱情 解题报告
2013-05-18 11:22
281 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4505
思路:开门次数的时间是跟要去的楼层数中总共有多少个不同的数有关; 每下一人的总时间跟
乘坐电梯的总人数有关; 最后问题出现了,向上运行或向下运行的时间我是根据:由于电梯最开始在0层,那么第一个人要去的楼层肯定是上去的,所以是 第一个人要去的楼层 × 6,中间那些人,就要判断是向上还是向下才能得出结果,最后一个人去完要去的楼层后,势必要回到0层,所以最后的时间还要加上 最后那个人要去的楼层 × 4。
wa代码
一开始以为没有处理:如果那些人要去0层的话,那么时间应该是0,可是结果是6,所以加了一个特判,还是wa。(其实是不用的吧,因为题目说了都是正整数,0不是正整数)。看了discuss后,原来直接算出楼层最大值再乘以10即可,因为电梯最高能到达楼层最大值,接着要从楼层最大值下来,不管中间如何兜转,最终乘以10即可以算出向上运行或向下运行的总时间。
终于知道为什么会wa了,万分感激“纯快乐”这位大神,不厌其烦地指出了我的错误。举个例子吧,比如说:5 4 2 5 3 6,从0——> 4层的时候,要先把去第2层的和去第3层的人放了,然后电梯再上去第5层,接着第6层,最后从第6层直接下到第0层。wa的代码里会有重叠的部分!!!wa的运行结果是130,而ac的运行结果是90。总的来说,电梯不会走回头路!!!
ac代码:
思路:开门次数的时间是跟要去的楼层数中总共有多少个不同的数有关; 每下一人的总时间跟
乘坐电梯的总人数有关; 最后问题出现了,向上运行或向下运行的时间我是根据:由于电梯最开始在0层,那么第一个人要去的楼层肯定是上去的,所以是 第一个人要去的楼层 × 6,中间那些人,就要判断是向上还是向下才能得出结果,最后一个人去完要去的楼层后,势必要回到0层,所以最后的时间还要加上 最后那个人要去的楼层 × 4。
wa代码
#include <iostream> using namespace std; int main() { int a[20], i, j, k, c, n, time; while (cin >> c) { while (c--) { scanf("%d", &n); time = n; for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (a[i] == a[j]) //在数组里删掉相同的数,剩下来的n表示总共要开多少次门 { for (k = j; k < n-1; k++) a[k] = a[k+1]; n--; j--; //必须的,因为有可能删除之后,下一个数又跟a[i]相同 } } } time += n * 5; time += a[0] * 6; //从这里开始就是问题代码了 for (i = 0; i < n-1; i++) { if (a[i+1] > a[i]) time += (a[i+1] - a[i]) * 6; else time += (a[i] - a[i+1]) * 4; } time += (a[n-1] * 4); printf("%d\n", time); } } return 0; }
一开始以为没有处理:如果那些人要去0层的话,那么时间应该是0,可是结果是6,所以加了一个特判,还是wa。(其实是不用的吧,因为题目说了都是正整数,0不是正整数)。看了discuss后,原来直接算出楼层最大值再乘以10即可,因为电梯最高能到达楼层最大值,接着要从楼层最大值下来,不管中间如何兜转,最终乘以10即可以算出向上运行或向下运行的总时间。
终于知道为什么会wa了,万分感激“纯快乐”这位大神,不厌其烦地指出了我的错误。举个例子吧,比如说:5 4 2 5 3 6,从0——> 4层的时候,要先把去第2层的和去第3层的人放了,然后电梯再上去第5层,接着第6层,最后从第6层直接下到第0层。wa的代码里会有重叠的部分!!!wa的运行结果是130,而ac的运行结果是90。总的来说,电梯不会走回头路!!!
ac代码:
#include <iostream> #include <algorithm> using namespace std; int main() { int a[20], i, j, c, n, time, count; while (cin >> c) { while (c--) { scanf("%d", &n); time = n; for (i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a+n); time += a[n-1] * 10; count = 1; for (i = 0; i < n-1; i++) { j = i+1; if (a[i] != a[j]) count++; } time += count * 5; printf("%d\n", time); } } return 0; }
相关文章推荐
- hdu 4520 小Q系列故事——最佳裁判 解题报告
- hdu 4524 郑厂长系列故事——逃离迷宫 解题报告
- hdu 4528 小明系列故事——捉迷藏 bfs 解题报告
- hdu 4527 小明系列故事——玩转十滴水 bfs 解题报告
- hdu 4505(小Q系列故事——电梯里的爱情)
- HDOJ 4505 小Q系列故事——电梯里的爱情
- HDU 4505 小Q系列故事——电梯里的爱情
- HDU 4505:小Q系列故事——电梯里的爱情【模拟】
- 小Q系列故事——电梯里的爱情(Hdu 4505)
- hdu 4505 小Q系列故事——电梯里的爱情 (水题)
- hdu-4505-小Q系列故事——电梯里的爱情
- HDU 4505 小Q系列故事——电梯里的爱情
- hdu 4500 小Q系列故事——屌丝的逆袭 解题报告
- Hdu 4505 小Q系列故事——电梯里的爱情
- hdu 4505 小Q系列故事——电梯里的爱情
- 杭电4505 小Q系列故事——电梯里的爱情
- HDU OJ 4505 小Q系列故事——电梯里的爱情
- 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水
- 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水
- HDU - 4505 小Q系列故事――电梯里的爱情