PAT Advanced 1017 【Queueing at Bank】 (25)

分析:这次的银行队列模拟简单了很多,常规操作

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1e4+10;
typedef struct Cus{
	int h, m, s, time, serv;
}Cus;
Cus cus[maxn];
int win[110];
bool cmp(Cus a, Cus b){
	return a.time < b.time;
}
int main(){
	//freopen("aa.txt", "r", stdin);
	int n, k, endtime = 17*3600, sum = 0, cnt = 0;
	scanf("%d %d", &n, &k);
	for(int i = 0; i<n; i++){
		scanf("%d:%d:%d %d", &cus[i].h, &cus[i].m, &cus[i].s, &cus[i].serv);
		cus[i].time = cus[i].h*3600+cus[i].m*60+cus[i].s;
	}
	sort(cus, cus+n, cmp);
	for(int i = 0; i<k; i++){
		win[i] = 8*3600;
	}
	for(int i = 0; i<n; ++i){
		if(cus[i].time > endtime) break;
		int minn = win[0], idx = 0; 
		for(int j = 1; j<k; j++)
			if(win[j] < minn)
				minn = win[idx = j];
		if(win[idx] > cus[i].time)
			sum += win[idx]-cus[i].time;
		else win[idx] = cus[i].time;
		win[idx] += cus[i].serv*60;
		cnt++;
	}
	printf("%.1f", sum*1.0/(60*cnt));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gq__97/article/details/81561105