我的PAT-BASIC代碼倉:https://github.com/617076674/PAT-BASIC
原題連結:https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144
題目描述:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YscjMfVmepNHLykEVPhXTq1EeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEjN5QTNzATM3IDMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
知識點:标記數組
思路:用一大小為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++解題報告: