HDU 1113 Word Amalgamation (map 容器 + string容器)

http://acm.hdu.edu.cn/showproblem.php?pid=1113

Problem Description

In millions of newspapers across the United States there is a word game called Jumble. The object of this game is to solve a riddle, but in order to find the letters that appear in the answer
it is necessary to unscramble four words. Your task is to write a program that can unscramble words.

Input

The input contains four parts:

1. a dictionary, which consists of at least one and at most 100 words, one per line;

2. a line containing XXXXXX, which signals the end of the dictionary;

3. one or more scrambled `words‘ that you must unscramble, each on a line by itself; and

4. another line containing XXXXXX, which signals the end of the file.

All words, including both dictionary words and scrambled words, consist only of lowercase English letters and will be at least one and at most six characters long. (Note that the sentinel XXXXXX contains uppercase X‘s.) The dictionary
is not necessarily in sorted order, but each word in the dictionary is unique.

Output

For each scrambled word in the input, output an alphabetical list of all dictionary words that can be formed by rearranging the letters in the scrambled word. Each word in this list must
appear on a line by itself. If the list is empty (because no dictionary words can be formed), output the line ``NOT A VALID WORD" instead. In either case, output a line containing six asterisks to signal the end of the list.

Sample Input

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

******

NOT A VALID WORD

******

course

******

题意:先给你一些单词作为字典,在给一系列的单词查找字典中是否有这些单词(注意查找的单词,一个单词中的字母顺序是能够变得。也就是说单词之间仅仅要字母是一样的不用考虑顺序一样都要输出)。假设字典中沒有字母都同样的單詞就輸出“NOT A VALID
WORD”。並且每次都要輸出一行“******”;

解題思路:

map容器是一個一對一的向量容器(詳細了解http://blog.csdn.net/keshacookie/article/details/19847781)

>>> 首先。輸入一系列字典單詞,碰到“XXXXXX”結束;這些單詞作為向量的前端(後端也行。個人喜好,思路不要弄錯即可了)。 在每輸入一個字典單詞的時候。保存單詞的原態。 然後再對單詞排序,排序后的單詞作為向量的後端;

>>> 然後,輸入加密后的單詞,先對加密單詞進行排序,然後對map裡面存儲的字典單詞向量的後端進行比较(遍歷一遍就OK了)。

>>> 對應輸出即可了;

代碼例如以下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <map>       //加入map頭文件
#include <string>
#include <algorithm>
#define RST(N)memset(N, 0, sizeof(N))
using namespace std;

int flag;
string s1, s2;    //字符串容器;
map <string, string> mp;   //map容器
map <string, string> ::iterator it;  //map迭代器

int main()
{
    mp.clear();   //清空map容器
    while(cin >> s1) {   //輸入字典單詞
        if(s1 == "XXXXXX") break;
        s2 = s1;     //保存單詞的原來狀態
        sort(s1.begin(), s1.end());
        mp[s2] = s1;   //s1, s2形成向量,存儲在map容器中
    }
    while(cin >> s1) {  //輸入加密單詞
        if(s1 == "XXXXXX") break;
        flag = 0;
        sort(s1.begin(), s1.end());
        for(it=mp.begin(); it != mp.end(); it++) { //遍歷,對字符串進行比较
            string tmp = (*it).second;  //map中first。second分別代表向量的前後端
            if(s1 == tmp) {
                cout << (*it).first << endl;
                flag = 1;
            }
        }
        if(!flag) cout << "NOT A VALID WORD" << endl;
        cout << "******" << endl;
    }
    return 0;
}
时间: 2024-10-04 21:14:11

HDU 1113 Word Amalgamation (map 容器 + string容器)的相关文章

hdu 1113 Word Amalgamation (map)

# include <stdio.h> # include <string> # include <map> # include <iostream> # include <algorithm> using namespace std; int main() { string s,t; int flag; map<string,string>q; while(cin>>s&&s!="XXXXXX&

HDOJ/HDU 1113 Word Amalgamation(字典顺序~Map)

Problem Description In millions of newspapers across the United States there is a word game called Jumble. The object of this game is to solve a riddle, but in order to find the letters that appear in the answer it is necessary to unscramble four wor

hdu - 1113 Word Amalgamation (stl)

http://acm.hdu.edu.cn/showproblem.php?pid=1113 给定一个字典,然后每次输入一个字符串问字典中是否有单词与给定的字符串的所有字母一样(顺序可以打乱),按字典序输出字典中的原字符串. 我开始是直接用了 sort, 用一个结构体记录了所有字符串,和相应下标,输出的时候在用了冒泡排序. 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include &l

hdu1113 Word Amalgamation(超详细解释--map和string的运用)

转载请注明出处:http://blog.csdn.net/u012860063天资 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113 来吧!!欢迎"热爱编程"的同学报考杭电,期待你加入"杭电ACM集训队"! 7月22-8月21多校联合训练期间,会根据实际负载关闭部分模块,若有不便,请谅解~ Word Amalgamation Time Limit: 2000/1000 MS (Java/Others)    Me

实例讲解,set,multiset,map,multimap关联容器

测试环境:windows 7 vs2010 内部元素有序排列,新元素插入的位置取决于它的值,查找速度快. 除了各容器都有的函数外,还支持以下成员函数: find: 查找等于某个值的元素(x小于y和y小于x同时不成立即为相等) lower_bound: 查找某个下界 upper_bound: 查找某个上界 equal_range: 同时查找上界和下界 count:计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等) insert: 用以插入一个元素或一个区间 在学习关联容器之前,我们先

STL中map与hash_map容器的选择

[转]STL中map与hash_map容器的选择 先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题! 实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的.做应用程序你可能觉得影响不大,但是写算法或者核心代码就要小心了.今天改进代码,顺便又来温习基础功课了. 还记得Herb Sutter那极有味道的<C++对话系列>么,在其中<产生真正的hash对象>这个故事里就讲了map的选择.顺便回顾一下,也讲一下我在实用中

map,vector 等容器内容的循环删除问题(C++)

map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除: for(auto p=list.begin();p!=list.end();p++) list.erase(p); 类似的方式,会出错的,不信你调试试试 :) 这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是有给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了!

数据结构《19》----String容器的三种实现

一.序言 一个简单的string 容器到底是如何实现的? 本文给出了 String 的三种从易到难的实现,涉及了 reference counting, copy on write 的技术. 二.第一个实现 我们设计的string类里面包含一个char* 的指针, 通过指针的管理,来实现string的基本功能. 废话不多说了,直接上代码: 几点注意的:类包含指针,因此需要 copy control, 也就是自行实现拷贝构造函数,赋值构造函数,析构函数, 而不能依赖于编译器生成的默认版本,默认版本

stl string 容器的使用

string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多 string 容器的使用 1,string 的构造函数是. string() 2,string的添加函数,.   insert(),push_back() 3,string的遍历.      数组形式遍历,迭代器形式遍历 4,string的字符串替换  replace() 5,string 的字符搜索 find() 6,其他的常见函数 size(),length(),empty() #inc