PAT乙-1072 开学寄语 (20分)

这道题目是一个遍历检查的问题:
常见有三种解题思路:
数组存放、数组(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)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页