代码
#include <iostream>
using namespace std;
int main() {
int N, M;
scanf("%d %d", &N, &M);
int a[10000] = {0};
for(int i=0; i<M; i++) {
int t;
scanf("%d", &t);
a[t] = 1;
}
int sum1 = 0;
int sum2 = 0;
for(int i=0; i<N; i++) {
char ch[5];
int num;
scanf("%s %d", ch, &num);
bool flag = false;
for(int j=0; j<num; j++) {
int tmp;
scanf("%d", &tmp);
if(!flag && a[tmp]==1) {
flag = true;
sum1++;
sum2++;
printf("%s: %04d", ch, tmp);
} else if(a[tmp]==1) {
sum2++;
printf(" %04d", tmp);
}
}
if(flag) {
cout<<endl;
}
}
printf("%d %d\n", sum1, sum2);
return 0;
}
注解
1、学会用flag标志处理问题。
2、用a[10000]数组表示4位整数,每个数组下标对应一个整数,这样索引的速度快,方便查找。
3、注意输出格式。不要忘记前导0.