TopCoder 250 points 11-SRM 149 DIV 1 86.62/250 34.65%



Problem Statement

 BigBurger Inc. wants to see if having a single person at the counter both to take orders and to serve them is feasible. At each BigBurger, customers will arrive and get in line. When they get to the head of the line they will place their order, which will be assembled and served to them. Then they will leave the BigBurger and the next person in line will be able to order.

We need to know how long a customer may be forced to wait before he or she can place an order. Given a script that lists each customer for a typical day, we want to calculate the maximum customer waiting time. Each customer in the script is characterized by an arrival time (measured in minutes after the store opened) and a service duration (the number of minutes between ordering and getting the food).

Create a class BigBurger that contains method maxWait that is given a int[] arrival and a int[] service describing all the customers and returns the maximum time spent by a customer between arriving and placing the order. Corresponding elements ofarrival and service refer to the same customer, and they are given in the order in which they arrive at the store (arrival is in non-descending order).

If multiple customers arrive at the same time they will all join the line at the same time, with the ones listed earlier ahead of ones appearing later in the list.

Definition

 
Class:BigBurger
Method:maxWait
Parameters:int[], int[]
Returns:int
Method signature:int maxWait(int[] arrival, int[] service)
(be sure your method is public)
 
 

Constraints

-arrival will contain between 1 and 50 elements inclusive
-service will contain the same number of elements as arrival
-the elements of arrival will be in non-decreasing order
-each element of arrival will be between 1 and 720 inclusive
-each element of service will be between 1 and 15 inclusive

Examples

0) 
 
{3,3,9}
{2,15,14}
Returns: 11
Two customers arrive at time 3. The first one waits 0 time, orders, and is served after 2 minutes, leaving at time 5. The second one then orders and is served at time 20. Meanwhile a customer arrives at time 9 and waits until the second customer leaves. This last customer then orders at time 20, and is served and leaves at time 20+14 = 34. The first customer waited 0 minutes, the second waited 2 minutes (from time 3 to time 5), and the last customer waited 11 minutes (from time 9 to time 20).
1) 
 
{182}
{11}
Returns: 0
The first customer never needs to wait.
2) 
 
{2,10,11}
{3,4,3}
Returns: 3
The third customer needs to wait from time 11 to time 14. Neither of the other customers needs to wait at all.
3) 
 
{2,10,12}
{15,1,15}
Returns: 7
The second customer waits the longest.

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.     


这首题的思路是在每一轮循环中,求出当前这个顾客的等待时间。

根据(当前顾客的等待时间+当前顾客的Arrival时间+当前顾客的Service时间和下一个顾客的Arrival时间作比较,来计算出顾客的等待时间


public class BigBurger {



	public  int maxWait(int[] arrival, int[] service) {
		int max = 0;
		int customLen = arrival.length;
		int waiTimes[] = new int[customLen];
		if (customLen == 1)
			return 0;
		int i = 0;
		int j = -1;
		while (true) {
			if (i == customLen)
				break;
			if (i == 0) {
				waiTimes[i] = 0;
			} else if (i > 0) {
				if (waiTimes[i - 1] + arrival[i - 1] + service[j] <= arrival[i])
					waiTimes[i] = 0;
				else {
					waiTimes[i] = waiTimes[i - 1] + arrival[i - 1] + service[j]
							- arrival[i];
				}
			}
			i++;
			j++;
		}
		for (int c : waiTimes)
			if (c > max)
				max = c;

		return max;

	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值