2017.1.18【初中部 】普及组模拟赛C组 电梯里的爱情 题解

本文介绍了一个有趣的电梯调度问题,通过分析电梯上下行时间、开关门时间等参数,使用数组记录各楼层上下乘客数量来计算完成一趟任务所需的总时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题:

http://172.16.0.132/junior/#contest/show/1368/0

题目描述:

细心的同事发现,小x最近喜欢乘电梯上上下下,究其原因,也许只有小x自己知道:在电梯里经常可以遇到他心中的女神。
电梯其实是个很暧昧的地方,只有在电梯里,小x才有勇气如此近距离接近女神。可是,他们的谈话也仅仅限于今天天气不错啊,或是你吃了吗之类的。往往在对方微笑点头后就再次陷入难堪的沉默之中。
于是,小x便在陪伴女神的同时,也关注着电梯中显示的楼层数字,并且他注意到电梯每向上运行一层需要6秒钟,向下运行一层需要4秒钟,每开门一次需要5秒(如果有人到达才开门),并且每下一个人需要加1秒。
特别指出,电梯最开始在0层,并且最后必须再回到0层才算一趟任务结束。假设在开始的时候已知电梯内的每个人要去的楼层,你能计算出完成本趟任务需要的总时间吗?

输入:

输入第一行为一个正整数 C,表示有 C 组测试数据。
接下来 C 行,每行包含一组数据,每组数据首先是一个正整数 N,表示本次乘坐电梯的人数,然后是 N 个正整数 Ai,分别表示大家要去的楼层。

输出:

请计算并输出完成一趟任务需要的时间,每组数据输出占一行。

样例输入:

2
4 2 4 3 2
3 10 10 10

样例输出:

59
108

数据范围限制:

其中,C<=100,N<=15,Ai<=100。

分析:

我们用f数组记录当前楼层要下电梯的人数,且用max记录要到达的最高层,接着我们枚举判断,当fi大于0是,ans+=fi+5;最后ans+=max*(4+6);

实现:

var
    t,n,a,i,sum,ans,max:longint;
    s:array[0..201]of longint;
begin
    assign(input,'service.in');reset(input);
    assign(output,'service.out');rewrite(output);
    readln(t);
    while t>0 do 
    begin
        ans:=0; max:=0;
        fillchar(s,sizeof(s),0);
        read(n);
        for i:=1 to n do
        begin
            read(a);
            if a>max then max:=a;
            inc(s[a]);
        end;
        sum:=0;
        for i:=1 to 100 do
        begin
            if s[i]=0 then continue;
            ans:=ans+s[i]+(i-sum)*6+5;
            sum:=i;
        end;
        ans:=ans+max*4;
        writeln(ans);
        dec(t);
    end;
    close(input);close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值