L2-034 口罩发放 (25 分)
发布日期:2021-06-29 22:18:39 浏览次数:3 分类:技术文章

本文共 2555 字,大约阅读时间需要 8 分钟。

在这里插入图片描述

0 的不包含空格的非空字符串;身份证号 是一个长度不超过 20 的非空字符串;身体情况 是 0 或者 1,0 表示自觉良好,1 表示有相关症状;提交时间 是 hh:mm,为24小时时间(由 00:00 到 23:59。例如 09:08。)。注意,给定的记录的提交时间不一定有序;身份证号 各不相同,同一个身份证号被认为是同一个人,数据保证同一个身份证号姓名是相同的。能发放口罩的记录要求如下:身份证号 必须是 18 位的数字(可以包含前导0);同一个身份证号若在第 i 天申请成功,则接下来的 P 天不能再次申请。也就是说,若第 i 天申请成功,则等到第 i+P+1 天才能再次申请;在上面两条都符合的情况下,按照提交时间的先后顺序发放,直至全部记录处理完毕或 S​i​​  个名额用完。如果提交时间相同,则按照在列表中出现的先后顺序决定。输出格式:对于每一天的申请记录,每行输出一位得到口罩的人的姓名及身份证号,用一个空格隔开。顺序按照发放顺序确定。在输出完发放记录后,你还需要输出有合法记录的、身体状况为 1 的申请人的姓名及身份证号,用空格隔开。顺序按照申请记录中出现的顺序确定,同一个人只需要输出一次。输入样例:4 25 3A 123456789012345670 1 13:58B 123456789012345671 0 13:58C 12345678901234567 0 13:22D 123456789012345672 0 03:24C 123456789012345673 0 13:594 3A 123456789012345670 1 13:58E 123456789012345674 0 13:59C 123456789012345673 0 13:59F F 0 14:001 3E 123456789012345674 1 13:581 1A 123456789012345670 0 14:11输出样例:D 123456789012345672A 123456789012345670B 123456789012345671E 123456789012345674C 123456789012345673A 123456789012345670A 123456789012345670E 123456789012345674样例解释:输出中,第一行到第三行是第一天的部分;第四、五行是第二天的部分;第三天没有符合要求的市民;第六行是第四天的部分。最后两行按照出现顺序输出了可能存在身体不适的人员。作者DAI, Longao单位杭州百腾教育科技有限公司代码长度限制16 KB时间限制400 ms内存限制
#include
#include
#include
#include
using namespace std;const int MAXN=7000;//mp2作用是标记得到口罩的人,防止重复记录; //mp1作用是标记身体状况为1的人,防止重复记录; map
mp1,mp2;struct kouzhao{
string name,cardId,time; int status;//身体状况; int s;//记录提交的顺序; }stc1[MAXN],stc2[MAXN];//这里我原本定义了一个stc3,但是提交之后显示答案错误,所以我想应该是内存过高,导致时间超时,故我选择使用vector容器来保存结果;bool cmp(struct kouzhao s1,struct kouzhao s2){
if(s1.time==s2.time) return s1.s
v1,v2;int main(){ int d=0,p=0,i=0,j=0,k=0,b=1,c1=1; int t=0,s=0; cin>>d>>p; for(i=1;i<=d;i++) { cin>>t>>s; for(j=1;j<=t;j++) { cin>>stc1[j].name>>stc1[j].cardId>>stc1[j].status>>stc1[j].time; stc1[j].s=j;//记录提交的顺序; } //记录status==1合法的申请人信息,并防止重复记录; for(j=1;j<=t;j++) { //判断身份证号是否合法; int flag=0; if(stc1[j].cardId.length()!=18) continue; for(k=0;k
='0'&&stc1[j].cardId[k]<='9')) { flag = 1; break; } } if(flag==1) continue; //将status==1的申请人信息记录下来,最后输出; if(stc1[j].status==1&&mp1[stc1[j].cardId]==0) { mp1[stc1[j].cardId]=1;//防止出现重复的记录; stc2[b].name=stc1[j].name; stc2[b].cardId=stc1[j].cardId; b++; } } //记录得到口罩申请人的合法信息; int sum=0;//记录已发放多少口罩; sort(stc1+1,stc1+t+1,cmp); for(j=1;j<=t;j++) { //判断身份证号是否合法; int flag=0; if(stc1[j].cardId.length()!=18) continue; for(k=0;k
='0'&&stc1[j].cardId[k]<='9')) { flag=1; break; } } if(flag==1) continue; //记录得到口罩申请人合法的信息,前提是已发放的口罩还在发放口罩数量的范围之内; if(sum
::iterator it=v1.begin(); for(it;it!=v1.end();it++) { cout<<(*it).name<<' '<<(*it).cardId<

转载地址:https://dingshijie.blog.csdn.net/article/details/115757271 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:L2-019 悄悄关注 (25 分)
下一篇:L2-033 简单计算器 (25 分)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月11日 23时36分04秒