中级守护
8987 特别的电梯(Lift)
经验值:1600
时间限制:1000毫秒
内存限制:128MB
题目描述 Deion
爸爸公司的大厦,在早高峰期,几乎每层都有人上下,电梯每层都停,大家被弄的很不耐烦,阳阳提出一个解决办法:每次电梯从一层往上走时,只允许电梯停在其中的某一层,所有乘客从一楼上电梯,到达某一层后,电梯停下来,所有乘客再从这里走楼梯到自己的目的楼层。为了对要去的某一个楼层人数计数,电梯的按钮做了特殊的改造,每个人上电梯按一下自己所要去的楼层,电梯可以统计目标楼层的人数。我们要给电梯编写一个附加特别程序,根据大家再一楼按下的目的楼层,计算电梯应该停在某层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。求这个最小值。
输入描述 Input Deion
第一行,一个正整数N,表示需要到达的目标楼层的数。
以下N行,每行两个整数,分别表示要到达的目标楼层和需要到达目标楼层的人数。
输出描述 Output Deion
一个整数,意义如题所述。
样例输入 Sample Input
5 5 4 8 10 20 3 19 9 2 2
样例输出 Sample Output
159
数据范围及提示 Data Size & Hint
数据范围
1<=N<=100000
提示说明
N个乘客只会从一楼进入电梯,进入电梯后必须等到电梯停在某一层才会出电梯,若有需要,再爬楼梯到达自己的目标楼层。
这题的思路能不能说说(或核心伪代码),谢谢!!
修练者
这道题最主要的是找停靠楼层,一个电梯可以储存目标楼层和这个楼层要去的人数,所以需要用结构体来存储;
那么在结构体中找停靠楼层就不能用a[(n+1)/2]了,这时候就需要用双指针,比较双指针指向的位置所存储的人数,然后进行加减的变化并移动指针(这个过程类似于奶牛配对),全部移动完了,左指针指向的位置所对应的楼层就是停靠楼层;
由于在找停靠楼层的时候,结构体的数据发生了变化,所以在输入的时候就应该把结构体数组a的数据赋值给b保存一下
最后通过b数组,停靠楼层来进行计算总楼层