问题:

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;
        }
    }
}

STL简单应用问题的更多相关文章

  1. C++ STL 简单记录

    1,STL提供三种类型的组件:容器.迭代器.算法. 容器: 顺序容器(vector.list.deque.string等)是一系列元素的有序集合: 关联容器(set.multiset.map.mult ...

  2. STL简单的介绍

    我们要知道C++的含义:C语言 + 类 + 模板  (STL就是典型的代表) STL是Standard Template Library的简称,中文名是标准模库.从根本上说,STL是一些“容器”的集合 ...

  3. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  4. 复合词UVa10391(STL简单应用)

    一.题目 输入一系列由小写字母组成的单词.输入已按照字典序排序(这句话就是个陷阱),且不超过120000个.找出所有的复合词,即恰好由两个单词连接而成的单词. 二.解题思路 要么枚举两两拼接的情况,O ...

  5. set STL 简单说说

    set 这个容器,可以排序,以及去掉重复的东西 #include<bits/stdc++.h> using namespace std; int main() { string s; se ...

  6. C++stl简单使用

    1 //1.sort函数排序 2 /* 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; ...

  7. 标准模板库--STL

    标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...

  8. STL(常用)

    STL 简单记录.讲解一些初级阶段常用的用法. STL是C++的一个标准模板库,其中包含了许多在计算机领域常用的基本数据结构以及基本算法.STL主要依赖于模板,使得STL具有广泛的通用性.这篇文章旨在 ...

  9. DFS系列 POJ(自认为的讲解)

    C - Sum It Up POJ1564 题意: 给你一个N,然后给你一堆数The numbers in each list appear in nonincreasing order, and t ...

随机推荐

  1. XCode的 Stack Trace,调试时抛出异常,定位到某一行代码

    在Xcode调试程序的时候,总是会出现不知道错误在什么地方的问题,很是捉急,现在又一个办法,可以具体定位到错误行的代码,试一下吧?超级好用 操作很简单: 1.在XCode界面中按cmd + 6快捷键, ...

  2. C++ 排序、查找的应用

    // order.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "string.h" #includ ...

  3. System类及其常用函数

    System 类包含一些有用的类字段和方法.它不能被实例化. 常用方法: 1.static void arraycopy(Object src, int srcPos, Object dest, in ...

  4. oracle中if/else功能的实现的3种写法

    1.标准sql规范 一.单个IF 1. if a=... then ......... end if; 2. if a=... then ...... else .... end if; 二.多个IF ...

  5. .net面试题(.Net+Html+Javascript)

    .net方面 1.简述 private. protected. public. internal 修饰符的访问权限. 2.override与重载的区别 3..net值类型和引用类型的区别,写出代码样例 ...

  6. 基于.NET平台常用的框架整理 (转)

    http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了 ...

  7. Linux及安全课程——相关链接总结

    附录:学习笔记链接总结 MOOC课程学习笔记与实验: 第一周:计算机是如何工作的 第二周:操作系统是怎么工作的 -- 一个简单的时间片轮转多道程序内核代码及分析 第三周:构造一个简单的Linux系统M ...

  8. silverlight ListBox 多列图片效果

    这个功能之前用wpf写过一次这次用Silverlight写一次 这两种写法上基本上没有太大的差别 这个Demo并不完美,只是给大家提供一个思路 源码:SilverLightListPricture.r ...

  9. silverlight 双击事件

    silverlight的一些功能真让我感到惊奇 就拿双击事件来说一下 写一个简单的例子 <StackPanel x:Name="st_De" MouseLeftButtonD ...

  10. ROM存储1/4周期正弦信号构造DDS

    上周的时候,老师让编写一个简单的dds程序,本文说明了整个过程中我遇到问题以及一些个人的思考.初次接触FPGA,如有问题请多多指教~ 1.几个疑问,解决和没有解决的. 为何采用ROM而不是直接采用DD ...