1017 Queueing at Bank (25)(25 分)

建立窗口结构体,存储此窗口结束服务的时间,初试结束服务的时间为08:00:00
建立客户结构体,存储到达时间和需要的服务时间
坑点:服务时间大于60的要变成60,而不是舍弃

#include<iostream>
#include<algorithm>
using namespace std;
int n, k, cnt;
const int maxn = 1e4 + 10;
struct node {
    int finishtime;
}windows[110];
const int ET = 8 * 60 * 60, LT = 17 * 60 * 60;
struct custom {
    int at, p;
    bool operator<(const custom&x)
    {
        return at < x.at;
    }
}a[maxn];
int findmin()
{
    int id = 0;
    for (int i = 0; i < k; i++)
    {
        if (windows[i].finishtime < windows[id].finishtime)
            id = i;
    }
    return id;
}
int main()
{
    scanf("%d%d", &n, &k);
    for (int i = 0; i < 110; i++)windows[i].finishtime = ET;
    for (int i = 0; i < n; i++)
    {
        int hh, mm, ss, p, time;
        scanf("%d:%d:%d %d", &hh, &mm, &ss, &p);
        time = hh * 3600 + mm * 60 + ss;
        if (time >= LT)continue;
        if (p > 60)p = 60;
        a[cnt].at = time;
        a[cnt].p = p * 60;
        cnt++;
    }
    sort(a, a + cnt);
    int waittime = 0;
    for (int i = 0; i < cnt; i++)
    {
        int minw = findmin();
        if (a[i].at < windows[minw].finishtime)
        {
            waittime += windows[minw].finishtime - a[i].at;
            windows[minw].finishtime += a[i].p;
        }
        else
        {
            windows[minw].finishtime = a[i].at + a[i].p;
        }
    }
    printf("%.1f", waittime*1.0 / cnt / 60);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容