1017. Queueing at Bank (25)

来源:互联网 发布:ie js 表格导出excel 编辑:程序博客网 时间:2024/05/16 09:03

题目大意:

银行有K个窗口,每个顾客需要在窗口前排队等待前面一个人服务的结束,计算平均等待时间

分析:

  1. 把时间以八点为基准,把到达时间换算成秒
  2. 按照到达时间排序从小到大排序
  3. 如果来的时候有空窗口那么就没有等待时间,否则最快完成窗口的完成时间 - 到达时间就是浪费的时间
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct a info;struct a{    char time[9];//到达时间    int needtime;//办理业务的时间    int HH, MM, SS;};void strToint(info* a)//str转换为int{    a->HH = (a->time[0] - '0') *10 + (a->time[1] - '0');    a->MM = (a->time[3] - '0') * 10 + (a->time[4] - '0');    a->SS = (a->time[6] - '0') * 10 + (a->time[7] - '0');}int cmp(const void* a, const void* b){    if (((info*)a)->HH != ((info*)b)->HH)         return ((info*)a)->HH - ((info*)b)->HH;    else {        if (((info*)a)->MM != ((info*)b)->MM)             return ((info*)a)->MM - ((info*)b)->MM;        else             return ((info*)a)->SS - ((info*)b)->SS;    }}int find(int windows[], int K)//寻找最快完成的窗口的下标{    int min = 5000000, index;    for (int i = 0; i < K; i++)        if (windows[i] < min) {            min = windows[i];            index = i;        }    return index;}int main(){    info dat[10001];    int N, K;    scanf("%d%d", &N, &K);    for (int i = 0; i < N; i++) {        scanf("%s%d", dat[i].time, &(dat[i].needtime));        aToint(&dat[i]);        getchar();    }    qsort(dat, N, sizeof(struct a), cmp);    int window[101];    for (int i = 0; i < K; i++)        window[i] = 0;    int i, waittime = 0, temp, min;    for (i = 0; i < N; i++) {        if (strcmp(dat[i].time, "17:00:01") >= 0)            break;        min = find(window, K);//min是最快完成窗口的下标        temp = (dat[i].HH - 8) * 3600 + dat[i].MM * 60 + dat[i].SS;//八点为基准,计算到达的秒        if (temp < 0) {//说明是八点以前来的             waittime += -temp;            temp = 0;        }        if (window[min] >= temp) {            waittime += window[min] - temp;            window[min] += dat[i].needtime * 60;//转换成秒!        }        else            window[min] = dat[i].needtime * 60 + temp;//不用等待    }    if (i == 0)        printf("0.0");    else        printf("%.1f", waittime / (i*60.0));    return 0;}
0 0
原创粉丝点击