FC排序模拟-L2-034 口罩发放
作者:
小花猪
,
2023-04-18 16:30:57
,
所有人可见
,
阅读 144
L2-034 口罩发放
#include <bits/stdc++.h>
using namespace std;
unordered_map<string,int> date, st;
const int N=1e4+10;
struct stu{
string name;
string id;
int he;
int time;
int idx;
}p[N],res[N];
bool ck(string s){//判断身份证合法性
if(s.size()!=18) return false;
for(int i=0;i<s.size();i++)
if(s[i]<'0'||s[i]>'9')
return false;
return true;
}
bool cmp(stu a,stu b){
if(a.time==b.time) return a.idx<b.idx;
return a.time<b.time;
}
int main(){
int d,m,cnt=0;
cin>>d>>m;
for(int i=1; i<=d; i++){
int t,s;
cin>>t>>s;
for(int j=0; j<t; j++){
char c;
int hh,mm;
cin>>p[j].name>>p[j].id>>p[j].he>>hh>>c>>mm;
p[j].time=hh*60+mm;
p[j].idx=j;
//记录身份证合法并且身体状况为1并且没有放入过
if(ck(p[j].id)&&p[j].he==1&&st[p[j].id]==0)
res[cnt++]=p[j], st[p[j].id]=1;
}
sort(p,p+t,cmp);
int k=0;
for(int j=0; j<t && k<s; j++)
//如果第一次成功登记 或 这一天在冷却期外
if(ck(p[j].id) && (date[p[j].id]==0 || date[p[j].id]<=i)){
cout<<p[j].name<<" "<<p[j].id<<endl;
date[p[j].id]=i+m+1; //记录下一次能申请的日期
k++;
}
}
for(int i=0; i<cnt; i++) cout<<res[i].name<<" "<<res[i].id<<endl;
}