好恶心的一道题,就因为我把有症状的人用set存,结果一直卡在后三个样例,把我恶心吐了,最后实在没法把set改成vector顺便标记一下看看是否访问过一次,然后就过了,我tm改了接近两个小时,结果就卡在这…
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define ll long long
// #define int long long
#define lowbit(x) ((~x+1)&x)
#define inf 1e9+10
using namespace std;
const int N=1e5+10;
struct node {
string name,id;
int state,time;
int arise;//release
}sqlist[N];
map<string,int>vis,mp,ma;
vector<node>ans,unhealth;
// set<pair<string,string> >unhealth;
bool cmp(node a,node b) {
if(a.time!=b.time)
return a.time<b.time;
else return a.arise<b.arise;
}
bool check(string str) {
if(str.size()!=18) return false;
for(int i=0; i<str.size(); i++) {
if(str[i]<'0'||str[i]>'9') return false;
}
return true;
}
int main() {
int d,p,h,m;
cin>>d>>p;
for(int day=1; day<=d; day++) {
mp.clear();
int t,s,state;
string name,id;
cin>>t>>s;
int total=0;
for(int i=1; i<=t; i++) {
cin>>sqlist[i].name>>sqlist[i].id>>sqlist[i].state;
scanf("%d:%d",&h,&m);
sqlist[i].time=h*60+m;
sqlist[i].arise=i;
if(!check(sqlist[i].id)) continue;
if(sqlist[i].state==1&&!ma[sqlist[i].id]) {
// unhealth.insert(make_pair(sqlist[i].name,sqlist[i].id));
unhealth.push_back(sqlist[i]);
ma[sqlist[i].id]=1;
}
}
sort(sqlist+1,sqlist+t+1,cmp);
for(int i=1; i<=t; i++) {
node tmp;
int flag=1;
if(!check(sqlist[i].id)) continue;
if((vis[sqlist[i].id]<=day||vis[sqlist[i].id]==0)&&s&&!mp[sqlist[i].id]) {
s--;
vis[sqlist[i].id]=day+p+1;
mp[sqlist[i].id]=1;
tmp=sqlist[i];
ans.push_back(tmp);
}
}
}
for(int i=0; i<ans.size(); i++) {
cout<<ans[i].name<<' '<<ans[i].id<<endl;
}
for(int i=0; i<unhealth.size(); i++) {
cout<<unhealth[i].name<<' '<<unhealth[i].id<<endl;
}
// set<pair<string,string> >::iterator it;
// for(it=unhealth.begin(); it!=unhealth.end(); it++) {
// cout<<(*it).first<<' '<<(*it).second<<endl;
// }
return 0;
}