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");
}