“计蒜客”杯程序设计竞赛 网络赛 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 的电梯到达本层的时间,每两个数之间一个空格,最后一个数后面没有空格。假如电梯当前停留在需要停的楼层上,我们假设它将立即前往下一层。
输入:
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; }