这道题目是一个遍历检查的问题:
常见有三种解题思路:
数组存放、数组(map)标记、set查找;
由于四位如果是数字0001 则输出 1,所以我一般习惯用string存放(%04d也可以解决)
1.利用数组 存放(暴力)
for(int i=0;i<v.size();i++){
if(v[i]==s) 处理//用VECTOR存放数据
}
2.利用set
if(set.find(s)!=set.end())
详细代码如下
#include<iostream>
#include<string>
#include<vector>
#include<set>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
set<string>v;
int ren=0,wu=0;
for(int i=0;i<m;i++){
string w;
cin>>w;
v.insert(w);
}
for(int i=0;i<n;i++){
string s;
cin>>s;
int num;
cin>>num;
vector<string> sm;
while(num--){
string k;
cin>>k;
if(v.find(k)!=v.end()){
sm.push_back(k);
}
}
if(sm.size()){
ren++;
wu+=sm.size();
cout<<s<<":";
for(int j=0;j<sm.size();j++)
cout<<" "<<sm[j];
cout<<endl;
}
}
cout<<ren<<" "<<wu<<endl;
}
3.利用数组进行标记
if(v[s]==1)//表示违禁品(map<string,int>v)