北京林业大学校赛-H题(Ivan 的等待焦虑症发作了)

题目链接点击打开链接


这道题不要想复杂了,就是计算电梯和人之间的间隔楼层数(层数*5),和过程中会停多少个楼层(楼层数量*15),按题意计算即可,注意当人与电梯在同一楼层时,答案为0.   然后输出格式按照题目要求输出即可!!


#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <vector>
#include <cmath>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn = 55;
int sum[maxn], pos[maxn];

int main(void)
{
	//freopen("in.txt", "r", stdin);
	int n, x, t;

	while (scanf("%d%d", &n, &x) != EOF)	    //总体思路,肯定是楼层之间的5分钟上升时间不能少,然后看中间有多少个停留时间,相加即可!!
	{
		int i, j;
		for (i = 0; i<n; i++)
			scanf("%d", &pos[i]);
		for (i = 0; i<n; i++)
		{
			int total = 0;
			memset(sum, 0, sizeof(sum));
			scanf("%d", &t);
			for (j = 0; j<t; j++)
			{
				int k;
				scanf("%d", &k);
				sum[k] = 1;                                  //代表第k层需要停
			}
			if (i != 0)
				printf(" ");
			if (pos[i]<x)                                   //所在楼层比x小
			{ 
				total = (x - pos[i]) * 5;
				for (int w = pos[i] + 1; w < x; w++)
				{
															//加上停留的时间
					if (sum[w])
						total += 15;
				}
			}
			else if (pos[i]>x)							
			{
				total = (pos[i] - x) * 5;
				for (int w = x + 1; w<pos[i]; w++)
					if(sum[w])
					total += 15;
			}
			else if (pos[i] == x)							  //不需要时间
			{
				total = 0;
			}
			printf("%d", total);
			if (i == n - 1)                                   //输出格式的话,先按照最常规的输出,然后根据题目的需求,在端点处设立限制条件即可
				printf("\n");
		}
	}                                      
	return 0;
}




你可能感兴趣的:(北京林业大学校赛)