PAT甲1017 Queueing at Bank (25)

#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <map> 
#include <vector>
#include <queue>
using namespace std;

int N,K;
int open=0,close=60*9*60;

struct customer
{
    int arrivetime;
    int endtime;
    int servetime;
}c[10010];

struct line
{
    int endtime;
    int id;
    line()
    {
        endtime=open;
    }
}l[110];

bool cmp(customer a,customer b)
{
    return a.arrivetime<b.arrivetime;
}

bool cmp1(line a, line b)
{
    if(a.endtime!=b.endtime)return a.endtime<b.endtime;
    else return a.id<b.id;
}

int main()
{
    scanf("%d%d",&N,&K);

    for(int i=0;i<N;i++)
    {
        int h,m,s;
        scanf("%d:%d:%d",&h,&m,&s);
        int time=h*60*60+m*60+s;
        c[i].arrivetime=time-8*60*60;
        int temp;
        scanf("%d",&temp);
        c[i].servetime=temp*60;
    }
    sort(c,c+N,cmp);
    int num;
    for(num=0;num<K&&num<N;num++)
    {
        c[num].endtime=max(l[num].endtime,c[num].arrivetime)+c[num].servetime;
        l[num].endtime=c[num].endtime;
        l[num].id=num;
    }
    while(num<N)
    {
        sort(l,l+K,cmp1);
        c[num].endtime=max(l[0].endtime,c[num].arrivetime)+c[num].servetime;
        l[0].endtime=c[num].endtime;
        num++;
    }
    double sum=0;
    int count=0;
    for(int i=0;i<N;i++)
    {
        if(c[i].arrivetime<close)
        {
            count++;
            sum=sum+c[i].endtime-c[i].arrivetime-c[i].servetime;
        }
    }
    sum=sum/(count*1.0)/60;
    printf("%.1f\n",sum);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80455550