在C语言中:注意,每个测试数据都是从时刻0算起。假定管理员可以用的空水桶足够多(相当于0时刻有无穷多空的水桶),不会出现没有空水桶用的情况。假设管理员灌好一桶水需要的时间为m(单位是秒还是分钟,无关紧要)。 取水人还是一个个地到来。假设第i个人需要si桶水(那他一定是带了si个空水桶来了),如果取水点足够多桶灌好的水,他把空水桶更换成装好水的水桶,这不需要花时间。但是如果取水点没有足够多桶水,他就必须等管理员灌好足够多桶水。输入n个人的到来时间和他所需水的桶数,计算n个人总的等待时间。 输入描述: 输入数据占3行,第一行为正整数n和m,2≤n≤100,表示人数;m表示管理员灌好一桶水所需的时间。第2行有n个正整数,表示这n个人到来的时刻(按先后顺序排列)。第3行也有n个正整数,表示这n个人所需水的桶数。 输出描述: 输出占一行,为n个人总的等待时间。
时间: 2024-03-30 11:38:04 浏览: 130
这是一个典型的模拟题,可以使用队列来模拟等待过程。具体实现可以按照以下步骤进行:
1. 读入输入数据,包括n,m,每个人到来的时间和所需水的桶数。
2. 定义一个队列来存储等待中的人,初始化为空。
3. 定义一个变量cur_time来表示当前时间,初始化为0。
4. 对每个人进行处理:
a. 如果当前时间比这个人到来的时间早,那么等待这个人到来。
b. 当这个人到来后,如果管理员还没有灌好足够多的水桶,那么等待。
c. 当管理员灌好足够多的水桶后,这个人可以取走水,等待时间就是当前时间减去这个人到来的时间。
d. 如果这个人还需要取更多的水,那么把他放到队列的末尾,等待下一轮取水。
5. 所有人都处理完后,输出总的等待时间,即所有人的等待时间之和。
下面是一个可能的C语言实现:
阅读全文