HDU 3527 SPY 水

来源:互联网 发布:游戏美工培训班 编辑:程序博客网 时间:2024/06/18 08:53

题意:

(老实说,我自己也读不太懂= =)大概意思就是,有3个队列;

A:要进入X国的人。

B:是Y国派过来的间谍。

C:曾经是X国派到Y国的间谍,也就是双重间谍。

题目中说了双重间谍和普通人都是不需要被抓的。因此就是让你找出,在B中且在A中,但不能在C中的人。

思路:

map一顿乱搞。

(虽说是道水题,不过也写了有些时间,反映了我在map,priority_queue以及pair的使用上还是不够熟练。)

code:

#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <queue>#include <map>using namespace std;map <string, int> mp, mp2, mp3;map <string, int>::iterator it, it2;struct PP{    string str;    int p;    bool operator < (const PP & a) const    {        return p > a.p;    }};void solve(){    priority_queue <PP> pq;    for(it = mp2.begin(); it != mp2.end(); it++)    {        string tmp = it->first;        if(mp.find(tmp) != mp.end() && mp3.find(tmp) == mp3.end())            pq.push((PP){it->first, it->second});    }    if(pq.size() == 0)    {        cout<<"No enemy spy"<<endl;        return ;    }    bool flag = false;    while(!pq.empty())    {        if(flag)            cout<<" "<<pq.top().str;        else        {            cout<<pq.top().str;            flag = true;        }        pq.pop();    }    cout<<endl;}int main(){    ios::sync_with_stdio(false);    //freopen("in.txt", "r", stdin);    int a, b, c;    while(cin>>a>>b>>c)    {        mp.clear();        mp2.clear();        mp3.clear();        string str;        for(int i = 0;i < a; i++)        {            cin>>str;            mp[str] = 1;        }        for(int i = 0;i < b; i++)        {            cin>>str;            mp2[str] = i;        }        for(int i = 0;i < c; i++)        {            cin>>str;            mp3[str] = 1;        }                solve();    }    return 0;}    


0 0