PAT 甲级 1014 Waiting in Line (30 分) (因题意问题的错误代码)

本文因题意问题是错误代码,

正确代码见:https://blog.csdn.net/xiang_6/article/details/100135775

 

#include<bits/stdc++.h>
#include<cstring>
#define FI first
#define SE second

using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 1000 + 7;
const int maxd = 100 + 7;
const int INF = 0x7f7f7f7f;

int n, m, k, q;
int a[maxn], b[maxn]; // 每个顾客的办公时间和结束时刻

int c[maxd]; // 每个窗口最晚空闲时刻
queue<int> qu[maxd]; // 窗口队列(结束时刻)

int getid() {
    int res, min_ = INF;
    for(int i = 1; i <= n; ++i) {
        if(qu[i].size() >= m) continue;
        if(c[i] < min_) {
            min_ = c[i];
            res = i;
        }
    }
    return res;
}
int getid2() {
    int res, min_ = INF;
    for(int i = 1; i <= n; ++i) {
        if(qu[i].size() == 0) continue;
        if(qu[i].front() < min_) {
            min_ = qu[i].front();
            res = i;
        }
    }
    return res;
}
void init() {
    int M = n*m;
    for(int i = 1; i <= M && i <= k; ++i) {
        int id = getid();
        c[id] += a[i];
        b[i] = c[id];
        qu[id].push(c[id]);
        //cout << id << " +++ " << c[id] << endl;
    }
    //cout << "\n--------------\n" << endl;
    for(int i = M+1; i <= k; ++i) {
        int id = getid2();
        c[id] += a[i];
        b[i] = c[id];
        qu[id].push(c[id]);
        qu[id].pop();
        //cout << id << " +++ " << c[id] << endl;
    }
}
int main() {
    scanf("%d%d%d%d", &n, &m, &k, &q);
    for(int i = 1; i <= k; ++i) {
        scanf("%d", &a[i]);
    }
    init();
    int t;
    for(int i = 1; i <= q; ++i) {
        scanf("%d", &t);
        if(b[t]-a[t] < 540) {
            printf("%02d:%02d\n", (8+b[t]/60), (b[t]%60));
        }
        else {
            puts("Sorry");
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值