直接模拟就好,一些细节注意到就可以
ac代码:
#include<bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<b;i++)
#define ff(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
//
int D,P;
struct st{
string name,id,time;
bool state;
int idx;
bool operator <(const st &t1)const{
if(time!=t1.time)return time<t1.time;
else return idx<t1.idx;
}
}q;
bool check_id(string id){
if(id.size()!=18)return 0;
f(i,0,id.size()){
if(!isdigit(id[i]))return 0;
}
return 1;
}
map<string,int> mp;
int main(){
vector<st> res2;
cin>>D>>P;
ff(dd,1,D){
int T,S;
cin>>T>>S;
vector<st> a,res;
f(i,0,T){
cin>>q.name>>q.id>>q.state>>q.time;
q.idx=i;//记得赋值
if(check_id(q.id)){
if(q.state==1)res2.push_back(q);
a.push_back(q);
}
}
sort(a.begin(),a.end());
f(i,0,a.size()){
if(!S)break;
if(!mp[a[i].id] || dd-mp[a[i].id]>P){
mp[a[i].id]=dd;
S--;
res.push_back(a[i]);
}
}
for(auto i:res){
cout<<i.name<<" "<<i.id<<endl;
}
}
set<string> st;
for(auto i:res2){
if(st.find(i.id)!=st.end())continue;
cout<<i.name<<" "<<i.id<<endl;
st.insert(i.id);
}
}