codeforces Round #451 (Div. 2) Phone Numbers

来源:互联网 发布:知乎回答排名规则 编辑:程序博客网 时间:2024/05/19 20:59

思路:直接暴力就好了,写这道题主要还是熟悉一下对stl的用法。
每次插入map去重,然后每次双重循环判断是否是某个数的字串。

#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <set>#include <map>#include <vector>using namespace std;typedef long long LL;map<string, set<string> > mp;map<string, set<string> > ans;bool judge(string s1, string s2){    if(s1.size()>s2.size())        return false;    for(int i=0;i<s1.size();++i)    {        if(s1[i]!=s2[s2.size()-s1.size()+i])            return false;    }    return true;}/*bool judge(string s1, string s2){    if(s1.size()>=s2.size())        return false;    int x=s2.find(s1,s2.size()-s1.size());    //cout<<s1<<" "<<s2<<" "<<x<<endl;    if(x==s2.size()-s1.size())        return true;    else        return false;}*/int main(){    int n, num;    string s, ss;    ios::sync_with_stdio(false);    cin>>n;    for(int i=0;i<n;++i)    {        cin>>s>>num;        for(int j=0;j<num;++j)        {            cin>>ss;            mp[s].insert(ss);        }    }    cout<<mp.size()<<endl;    map<string, set<string> >::iterator it;    set<string> ::iterator its, itss;    for(it=mp.begin();it!=mp.end();++it)    {        for(its=(*it).second.begin();its!=(*it).second.end();++its)        {            string s1=*its;            int flag=0;            for(itss=(*it).second.begin();itss!=(*it).second.end();++itss)            {                string s2=*itss;                if(itss==its)                    continue;                if(judge(s1,s2))                {                    flag=1;                    break;                    //cout<<*its<<endl;                }            }            if(!flag)            {                ans[it->first].insert(s1);            }        }    }    for(it=ans.begin();it!=ans.end();++it)    {        cout<<it->first<<" "<<it->second.size();        for(its=it->second.begin();its!=it->second.end();its++)        {            cout<<" "<<*its;        }        cout<<"\n";    }    return 0;}
原创粉丝点击