Day44: [PAT甲级] 1017 Queueing at Bank (25分)

Day44: [PAT甲级] 1017 Queueing at Bank (25分)

题源:

来自PAT甲级题库:

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

代码:

dirty code凑合看吧

#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
using namespace std;
int N, windowNumber;
map<int, int> m;
multiset<int> s;
int trans(string s) {
    int sumSec = 0;
    int Hour, Min, Sec;
    stringstream ss;
    ss << s.substr(0, 2);
    ss >> Hour;
    ss.clear();
    ss << s.substr(3, 2);
    ss >> Min;
    ss.clear();
    ss << s.substr(6, 2);
    ss >> Sec;
    //cout << "@"<<Hour << " " << Min << " " << Sec;
    if (s > "08:00:00") {
        //小时
        if (Hour > 8) {
            sumSec += (Hour - 8) * 60 * 60;
            sumSec += Min * 60;
        }
        else {
            sumSec += Min * 60;
        }
        sumSec += Sec;
    }
    else{
        sumSec -= (8 - Hour - 1) * 60 * 60;
        sumSec -= (60 - Min - 1) * 60;
        sumSec -= 60 - Sec;
    }
    return sumSec;
}
int main() {
    cin >> N >> windowNumber;
    for (int i = 0; i < windowNumber; i++) s.insert(0);
    auto iter = s.begin();
    for (int i = 0; i < N; i++) {
        string s; int wait;
        cin >> s >> wait;
        if (s> "17:00:00") continue;
        int secs = trans(s);
        m[secs] = wait;
    }
    int sum = 0;
    for (auto iter =m.begin();iter!=m.end();iter++) {
        auto iterWindow = s.begin();
		int temp;
		if (iter->first < *iterWindow) {
			sum += *iterWindow - iter->first;
			temp = *iterWindow + (iter->second) * 60;
		}
		else {
			temp = iter->first + (iter->second) * 60;
		}
        s.erase(iterWindow);
        s.insert(temp);
    }
    printf("%.1lf", sum / 60.0 / m.size());
    system("pause");
}
发布了49 篇原创文章 · 获赞 13 · 访问量 500

猜你喜欢

转载自blog.csdn.net/qq2215459786/article/details/103947774