浙大PAT甲级-1017

银行队列:

(却没用到队列敲打

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int n, k;
vector<int> line;

struct Customer{
    int arrive;
    int time;
};
bool compare(Customer c1,Customer c2){
    return c1.arrive<c2.arrive;
}
int timeToInt(string time){
    int h = atoi(time.substr(0,2).data());
    int m = atoi(time.substr(3,2).data());
    int s = atoi(time.substr(6,2).data());
    return h*3600+m*60+s;
}
int minLine(){
    int minline=0;
    for(int j=1;j<k;j++){
        if(line[minline]>line[j])
            minline=j;
    }
    return minline;
}
int main()
{
    cin>>n>>k;
    int i;
    vector<Customer> c;
    vector<int> linetime;
    if(n<=0||k<=0){
        printf("%.1f", 0.0);
        return 0;
    }

    for(i=0;i<n;i++){
        Customer cust;
        string arrivestring;
        int arriveint;
        cin>>arrivestring>>cust.time;
        arriveint = timeToInt(arrivestring);
        if(arriveint<=61200){
            cust.arrive = arriveint;
            c.push_back(cust);
        }
    }

    int cnt = c.size();
    sort(c.begin(),c.end(),compare);

    for(i=0;i<k;i++){
        line.push_back(28800);
    }

    int waittime=0;

    for(i=0;i<cnt;i++){
        int minline = minLine();
        //if(line[minline]>61200) //客户只要在17:00之前到达银行,那么即使窗口的结束时间在17:00以后,那银行还是需要给客户服务的
        //    break;
        if(c[i].arrive<line[minline]){
            waittime+=line[minline]-c[i].arrive;
            line[minline]+=c[i].time*60;
        }else{
            line[minline]=c[i].arrive+c[i].time*60;
        }
    }

    printf("%.1f", waittime/(cnt*60.0));

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值