• STL简单应用问题


    问题:

    Input
    输入的第一行是一个整数T( 1 <= T <= 100 ),表示有几组输入数
    据。
    每组输入由4部分组成:
    (1)一个字典,最多包含2000个单词,每个单词一行。
    (2)一行字符串"XXXXXX",作为字典部分的结束标志。
    (3)1个或多个( 最多2000个 )需要解读的字符串。每个一行。
    (4) 一行字符串"XXXXXX",作为解读部分的结束标志。
    以上的每个单词都只有小写字母组成,最长不超过10。字典不一定是有序的。单词是唯一的。

    Output
    每组输出中,对应每个解读串A,如果有一个串B和A由相同的字母组成,则认为B可以解读A。在字典中找到所有可以解读A的串,并且以字典顺序输出,每个单词一行,然后输出一行"******"。如果没有找到符合条件的单词串,就输出一行"NO ONE",然后输出一行"******"。

    Sample Input
    1
    tarp
    given
    score
    refund
    only
    trap
    work
    earn
    course
    pepper
    part
    XXXXXX
    resco
    nfudre
    aptr
    sett
    oresuc
    XXXXXX

    Sample Output
    score
    ******
    refund
    ******
    part
    tarp
    trap
    ******
    NO ONE
    ******
    course
    ******

    回答:

    方法一:

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include<map>
    using namespace std;
    #define M 2005

    int a[M][26],b[26];
    vector<string>Q;

    void main()
    {
        int T;
        scanf("%d",&T);
        string str;
        int flag;
        int i,j,index;
        while(T--)
        {
            Q.clear();
            index=0;
            while(cin>>str&&str!="XXXXXX")
            {
                Q.push_back(str);
                index++;
            }
            sort(Q.begin(),Q.end());
            for(i=0;i<index;i++)
            {
                for (j=0;j<26;j++)
                    a[i][j]=0;
                for(j=0;j<Q[i].length();j++)
                    a[i][Q[i][j]-'a']++;
            }
            while(cin>>str&&str!="XXXXXX")
            {
                for(i=0;i<26;i++)
                    b[i]=0;
                for(i=0;i<str.length();i++)
                    b[str[i]-'a']++;
                flag=0;
                for(i=0;i<index;i++)
                {
                    for(j=0;j<26;j++)
                    {
                        if(a[i][j]!=b[j])
                            break;
                    }
                    if(j==26)
                    {
                        cout<<Q[i]<<endl;
                        flag=1;
                    }
                }
                if(!flag)
                    cout<<"NO ONE"<<endl;
                cout<<"******"<<endl;
            }
        }
    }

    方法二:

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include<map>
    using namespace std;

    multimap<string,string>dic;
    multimap<string,string>::iterator it,it2;


    void main()
    {
        int T;
        scanf("%d",&T);
        string str;
        int flag;
        while(T--)
        {
            int sub=1;
            dic.clear();
            while(cin>>str&&str!="XXXXXX")
            {
                string temp=str;
                sort(str.begin(),str.end());
                //dic[str]=temp;
                dic.insert(pair<string,string>(str,temp));
            }
            string rec[2000];
            while(cin>>str&&str!="XXXXXX")
            {
                sort(str.begin(),str.end());

                flag=0;
                it=dic.find(str);
                if(it==dic.end())
                    cout<<"NO ONE"<<endl;
                else
                {
                    int index=0;
                    for(it2=it;it2!=dic.end();it2++)
                    {
                        if((*it2).first!=str)
                            break;
                        else    rec[index++]=(*it2).second;
                    }
                    sort(rec,rec+index);
                    for(int i=0;i<index;i++)
                        cout<<rec[i]<<endl;
                    //cout<<(*it2).second<<endl;
                }
                cout<<"******"<<endl;
            }
        }
    }

  • 相关阅读:
    Unity Ply网格读取
    LoadLibrary加载dll失败
    Anaconda引起cuda MSB3721 with return error code 1
    STL 如何对STL进行扩展,简单小结
    集群环境准备(Centos7)
    MySQL中的常见函数
    Mysql优化_第十三篇(HashJoin篇)
    docker创建和使用mysql
    JNI相关笔记 [TOC]
    选择排序
  • 原文地址:https://www.cnblogs.com/benchao/p/4529644.html
Copyright © 2020-2023  润新知