我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144
题目描述:
知识点:标记数组
思路:用一大小为10000的数组标记需要被查缴的物品
时间复杂度是O(n),其中n为需要检查的学生总物品数。空间复杂度是O(10000)。
C++代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
int N, M;
cin >> N >> M;
int illegals[10000];
for(int i = 0; i < 10000; i++){
illegals[i] = 0;
}
int tempIllegal;
for(int i = 0; i < M; i++){
scanf("%d", &tempIllegal);
illegals[tempIllegal] = 1;
}
string name;
int count;
int things;
int countStudent = 0;
int countThing = 0;
for(int i = 0; i < N; i++){
cin >> name >> count;
bool isFirstIllegal = true;
for(int i = 0; i < count; i++){
scanf("%d", &things);
if(illegals[things] == 1){
if(isFirstIllegal){
isFirstIllegal = false;
cout << name << ":";
}
printf(" %04d", things);
countThing++;
}
}
if(!isFirstIllegal){
countStudent++;
printf("\n");
}
}
printf("%d %d", countStudent, countThing);
return 0;
}
C++解题报告: