刚开始19,就很血压,后来重码20分… 然后发现20是因为在把“情况不太好的人”加到单独vector的时候没有判断是否是合法记录…
这写出来了之后仔细想想倒也还好就是他说什么就做什么就好)
#include <bits/stdc++.h>
using namespace std;
struct node {
string name, id;
int f, time, idx;
bool operator<(const node& obj) const {
if(time != obj.time) return time < obj.time;
return idx < obj.idx;
}
};
map<string, int> mp, vis;
int day, p;
inline bool check(node x, int d) {
if(!mp.count(x.id)) return 1;
if(mp[x.id] + p + 1 <= d) return 1;
return 0;
}
inline bool judge(node x) {
int len = x.id.size();
if(len != 18) return 0;
for(int i = 0; i < len; ++ i) {
if(x.id[i] < '0' || x.id[i] > '9') return 0;
}
return 1;
}
vector<node> vec, notGood, ans;
inline int getTime(string s) {
int hh = (s[0] - '0') * 10 + (s[1] - '0');
int tt = (s[3] - '0') * 10 + (s[4] - '0');
return hh * 60 + tt;
}
inline void init() {
vec.clear();
ans.clear();
}
int main() {
cin >> day >> p;
for(int d = 1; d <= day; ++ d) {
init();
int t, s;
cin >> t >> s;
for(int i = 0; i < t; ++ i) {
string name, id;
int f;
string tt;
cin >> name >> id >> f >> tt;
vec.push_back({name, id, f, getTime(tt), i});
if(f == 1 && judge(vec[i])) {
notGood.push_back(vec[i]);
}
}
sort(vec.begin(), vec.end());
for(int i = 0; i < t; ++ i) {
if(check(vec[i], d) && judge(vec[i]) && s > 0) {
s--;
ans.push_back(vec[i]);
mp[vec[i].id] = d;
}
}
int siz = ans.size();
for(int i = 0; i < siz; ++ i) {
cout << ans[i].name << " " << ans[i].id << endl;
}
}
int siz = notGood.size();
for(int i = 0; i < siz; ++ i) {
if(vis[notGood[i].id]) continue;
vis[notGood[i].id] = 1;
cout << notGood[i].name << " " << notGood[i].id << endl;
}
}