“计蒜客”杯程序设计竞赛 网络赛 H.Ivan 的等待焦虑症发作了

 “计蒜客”杯程序设计竞赛 网络赛 H.Ivan 的等待焦虑症发作了:   http://www.jisuanke.com/minicourse/1410/9198

题面描述:

Ivan 每次等待电梯的时候都很焦虑,当有三个电梯的时候也不知道应该坐哪一个电梯,于是 Ivan 想如果能有个显示器显示每个电梯即将到达的时间,那么 Ivan 就能准确的知道应该在哪个电梯门口等电梯了。

输入格式:

输入包含多组测试数据,每组测试数据第一行为两个正整数 nn 和 xx,表示共有 nn 个电梯,xx表示 Ivan 当前在楼层 xx 上。

接下来一行有 nn 个正整数,分别表示每个电梯所在的楼层,电梯编号为 11 到 nn

接下来 nn 行,每行第一个数字 tt 表示这个电梯共有 tt 个楼层会停,接下来 tt 个正整数分别表示 tt 个会停的楼层 a_{i}ai

我们已知电梯下降或者上升一个楼层的时间为 55秒,在一个楼层停的时间为 1515 秒,其余时间忽略不计,1 \leq n \leq 4, 0 \leq t \leq 30, 1 \leq a_{i},x \leq 301n4,0t30,1ai,x30

输出格式:

对于每组测试数据,输出一行共 nn 个答案,分表表示编号 11 到 nn 的电梯到达本层的时间,每两个数之间一个空格,最后一个数后面没有空格。假如电梯当前停留在需要停的楼层上,我们假设它将立即前往下一层。

样例1

输入:

3 5
2 10 20
3 4 5 6
0
2 7 9

输出:

30 25 105

提示信息

我们假设电梯当前运行的方向一定是朝向 Ivan 的。

题目大意及分析:

已知电梯总个数和 Ivan所在层数,还知道每个电梯的初始状态在第几层和每个电梯停留的层数,停留时间15s,从一层到另一层的时间为5s,求每个电梯到达 lvan所在层的时间。

由于此题数据较小,思路也比较直接,所以直接算即可。


代码实现:

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    int n,x;
    int star[5];
    int stop[5][50];
    int ans[5];
    while(scanf("%d%d",&n,&x)!=EOF)
    {
        memset(star,0,sizeof(star));
        memset(stop,0,sizeof(stop));
        memset(ans,0,sizeof(ans));
        for(int i=0;i<n;i++)
        {
            scanf("%d",&star[i]);
        }
        for(int i=0;i<n;i++)
        {
            scanf("%d",&stop[i][0]);
            for(int j=1;j<=stop[i][0];j++)
            {
                scanf("%d",&stop[i][j]);
            }
        }
        for(int i=0;i<n;i++)
        {
            if(star[i]<x)
            {
                ans[i]=5*(x-star[i]);
                for(int j=1;j<=stop[i][0];j++)
                {
                    if(stop[i][j]>star[i]&&stop[i][j]<x)
                    {
                        ans[i]+=15;
                    }
                }
            }
            else if(star[i]>x)
            {
                ans[i]=5*(star[i]-x);
                for(int j=1;j<=stop[i][0];j++)
                {
                    if(stop[i][j]>x&&stop[i][j]<star[i])
                    {
                        ans[i]+=15;
                    }
                }
            }
            else ans[i]=0;
        }
        printf("%d",ans[0]);
        for(int i=1;i<n;i++)
        {
            printf(" %d",ans[i]);
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(等电梯的时间)