/**
* 1.解题思路:bool类型的forbid存储禁止携带的物品,如果需要被查缴则赋值为true;
* flag变量表示当前学生是否已经输出过姓名,一开始flag=false
* 当前学生如果有需要被查缴的物品且还未输出过他的姓名,则输出name
* 并令flag=true;如果有需要被查缴的物品且已经输出过姓名,则输出该物品的编号
* 因为编号为4位数字,不满4位要在前面补0,所以用%04d输出,并将被查缴物品的总数fnum++
* 最后如果当前学生已经输出过姓名,则输出一个空行,并将学生的总人数snum++,最后输出snum和fnum的值
*
* 2.参考博客:https://www.liuchuo.net/archives/4214
**/
#include <iostream>
#include <algorithm>
using namespace std;
//存储禁止携带的物品,如果需要被查缴则赋值为true
bool forbid[10000];
int main() {
int n, m, temp, k, snum = 0, fnum = 0;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
scanf("%d", &temp);
forbid[temp] = true;
}
for (int i = 0; i < n; i++) {
char name[10];
//flag变量表示当前学生是否已经输出过姓名
bool flag = false;
scanf("%s %d", name, &k);
for (int j = 0; j < k; j++) {
scanf("%d", &temp);
if (forbid[temp]) {
if (!flag) {
//当前学生如果有需要被查缴的物品且还未输出过他的姓名,则输出name
printf("%s:", name);
flag = true;
}
//如果有需要被查缴的物品且已经输出过姓名,则输出该物品的编号
//因为编号为4位数字,不满4位要在前面补0,所以用%04d输出,并将被查缴物品的总数fnum++
printf(" %04d", temp);
fnum++;
}
}
if (flag) {
//最后如果当前学生已经输出过姓名,则输出一个空行,并将学生的总人数snum++
printf("\n");
snum++;
}
}
printf("%d %d\n", snum, fnum);
return 0;
}
1072 开学寄语
最新推荐文章于 2022-05-04 00:11:50 发布