为了抗击来势汹汹的 COVID19 新型冠状病毒,全国各地均启动了各项措施控制疫情发展,其中一个重要的环节是口罩的发放。
某市出于给市民发放口罩的需要,推出了一款小程序让市民填写信息,方便工作的开展。小程序收集了各种信息,包括市民的姓名、身份证、身体情况、提交时间等,但因为数据量太大,需要根据一定规则进行筛选和处理,请你编写程序,按照给定规则输出口罩的寄送名单。
可以AC的解答请参考天梯赛练习集 L2-034 口罩发放(25分)史前巨细,坑点满满
按照如下做法,只得到了19分,有测试点未通过。还没有想出来怎么解决这个问题。
#include #include typedef struct Person{char name[11];char id[21];int status;char time[6];int cnt;}Person;int main(){int d, p, i, j, k, t, s, len_id, itmp;Person person[1000], total[30000], tmp;int scnt = 0, tcnt = 0, flag = 0;scanf("%d%d", &d, &p); //输入数据for (i=0; i<30000; i++){total[i].cnt = 0;}for (i=0; i<d; i++){scanf("%d%d", &t, &s);scnt = 0;// for (j=0; j<t; j++){// person[j].cnt = 0;// }for (j=0; j<t; j++){ //输入申请人的信息scanf("%s %s %d %s", person[j].name, person[j].id, &person[j].status, person[j].time);//scanf("%d %s", &person[j].status, person[j].time);flag = 0;len_id = strlen(person[j].id);person[j].cnt = 0;if (len_id != 18){continue;}for (k=0; k<tcnt; k++){/*printf("k = %d\n", k);*/if (strcmp(person[j].id, total[k].id) == 0){flag = 1;person[j].cnt = total[k].cnt; /*printf("welcome boys and girls, cnt = %d\n", person[j].cnt);*/if (person[j].status == 1){total[k].status = person[j].status;}break;}}/*printf("flag = %d\n", flag);*/if (flag==0 && len_id==18){total[tcnt] = person[j];tcnt++;}/*if (flag == 1){printf("This has existed.\n");}*/}for (j=0; j<t-1; j++){ //按照提交时间先后顺序排序for (k=j+1; k<t; k++){if (strcmp(person[j].time, person[k].time) > 0){tmp = person[j];person[j] = person[k];person[k] = tmp;}}}for (j=0; j<t; j++){len_id = strlen(person[j].id);if (len_id<18 || len_id>18){continue;}/*printf("hey cnt = %d\n", person[j].cnt);*/for (k=0; k<tcnt; k++){if (strcmp(person[j].id, total[k].id) == 0){if (total[k].cnt > 0){total[k].cnt++;if (total[k].cnt == p+1){total[k].cnt = 0;}person[j].cnt = total[k].cnt;}}}if (person[j].cnt==0){scnt++;person[j].cnt++;if (scnt <= s){printf("%s %s\n", person[j].name, person[j].id);for (k=0; k<tcnt; k++){if (strcmp(person[j].id, total[k].id) == 0){total[k].cnt = person[j].cnt;}}}}}// printf("打印\n");// for (j=0; j<t; j++){// printf("%s %s", person[j].name, person[j].id);// printf(" %d %s\n", person[j].status, person[j].time);// }}/*printf("tcnt = %d\n", tcnt);*/for (i=0; i<tcnt; i++){if (total[i].status == 1){printf("%s %s\n", total[i].name, total[i].id);}}/*printf("tcnt = %d\n", tcnt);for (i=0; i<tcnt; i++){printf("%s %s", total[i].name, total[i].id);printf(" %d %s\n", total[i].status, total[i].time);}*/return 0;}