为了抗击来势汹汹的 COVID19 新型冠状病毒,全国各地均启动了各项措施控制疫情发展,其中一个重要的环节是口罩的发放。
某市出于给市民发放口罩的需要,推出了一款小程序让市民填写信息,方便工作的开展。小程序收集了各种信息,包括市民的姓名、身份证、身体情况、提交时间等,但因为数据量太大,需要根据一定规则进行筛选和处理,请你编写程序,按照给定规则输出口罩的寄送名单。
可以AC的解答请参考天梯赛练习集 L2-034 口罩发放(25分)史前巨细,坑点满满
按照如下做法,只得到了19分,有测试点未通过。还没有想出来怎么解决这个问题。
#include <stdio.h>
#include <string.h>
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;
}