zoukankan      html  css  js  c++  java
  • 1017 Queueing at Bank (25分)模拟:关于事务排队处理

    题目

    https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968

    题意

    银行M个窗口,N个人来办事,几点到,每个人需要的处理时间
    问平均等待时间(17点后到不处理~)

    Sample Input:

    7 3
    07:55:00 16
    17:00:01 2
    07:59:59 15
    08:01:00 60
    08:00:00 30
    08:00:02 2
    08:03:00 10

    Sample Output:

    8.2

    思路

    用一个数组windows[]模拟M个窗口的的当前时间(8点开始)
    对N个记录按赶到时间排序,每个人选择当前时间最小的窗口进行办理

    code

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int inf=0x3f3f3f3f;
    struct node{
        int arrive;
        int p_time;
        node(int a,int b):arrive(a),p_time(b){}
    };
    
    vector<node>R;
    bool cmp(node x,node y) {return x.arrive<y.arrive;}
    int main()
    {
        int N,M; cin>>N>>M;
        while(N--)
        {
            int a,b,c,d; scanf("%d:%d:%d %d",&a,&b,&c,&d);
            int temp=a*3600+b*60+c;
            //迟到的人忽略
            if(temp<=17*3600) R.push_back(node(temp,d*60));
        }
        sort(R.begin(),R.end(),cmp);
        int wait=0;
        //记录每个窗口的时间,初始都是8:00开始,啊啊啊啊啊啊啊啊啊
        vector<int>windows(M+2,8*3600);//新写法
        int i=0;
        for(;i<R.size();++i)
        {
            int p,minn=inf;
            for(int j=1;j<=M;++j)//选最先处理完的窗口
            {
                if(windows[j]<minn) {
                    minn=windows[j];
                    p=j;
                }
            }
            if(R[i].arrive<windows[p]) {//需要等待
                wait+=windows[p]-R[i].arrive;
                windows[p]+=R[i].p_time;
            }
            else windows[p]=R[i].arrive+R[i].p_time;//不需要等待
        }
        printf("%.1f
    ",wait*1.0/60/R.size());
        return 0;
    }
    

    总结

    怎么说呢,挺简单的模拟,就是没想到用一个数组来模拟不同窗口的时间
    最开始只想着不同窗口用一个时间来模拟。。。菜啊~

  • 相关阅读:
    【01】markdown语法
    H5系列之地理位置(必知必会)
    【07】像使用命令行一样使用 GitHub URL
    【11】把 GitHub 当 CMS 用
    【01】在 issue 中创建 list
    【06】GitHub WiKi
    【05】project board
    7.10-11 visudo、sudo
    7.7-9 chage、chpasswd、su
    7.1 useradd:创建用户
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/13457652.html
Copyright © 2011-2022 走看看