“计蒜客”杯程序设计竞赛 网络赛 H.Ivan 的等待焦虑症发作了: http://www.jisuanke.com/minicourse/1410/9198
题面描述:
Ivan 每次等待电梯的时候都很焦虑,当有三个电梯的时候也不知道应该坐哪一个电梯,于是 Ivan 想如果能有个显示器显示每个电梯即将到达的时间,那么 Ivan 就能准确的知道应该在哪个电梯门口等电梯了。
输入格式:
输入包含多组测试数据,每组测试数据第一行为两个正整数 n 和 x,表示共有 n 个电梯,x表示 Ivan 当前在楼层 x 上。
接下来一行有 n 个正整数,分别表示每个电梯所在的楼层,电梯编号为 1 到 n;
接下来 n 行,每行第一个数字 t 表示这个电梯共有 t 个楼层会停,接下来 t 个正整数分别表示 t 个会停的楼层 ai。
我们已知电梯下降或者上升一个楼层的时间为 5秒,在一个楼层停的时间为 15 秒,其余时间忽略不计,1≤n≤4,0≤t≤30,1≤ai,x≤30。
输出格式:
对于每组测试数据,输出一行共 n 个答案,分表表示编号 1 到 n 的电梯到达本层的时间,每两个数之间一个空格,最后一个数后面没有空格。假如电梯当前停留在需要停的楼层上,我们假设它将立即前往下一层。
样例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;
}