1 #include <iostream>
2 #include <string>
3 #include <algorithm>
4 #include <map>
5 #include <vector>
6 using namespace std;
7
8 map<string, int> cnt;
9 vector<string> words;
10
11 string formatWord(const string &s);
12
13 int main() {
14
15 string s;
16 while(cin >> s) {
17
18 if (s[0] == ‘#‘) break;
19 words.push_back(s);
20
21 string fw = formatWord(s);
22 if (!cnt.count(fw)) cnt[fw] = 0;
23 cnt[fw]++;
24 }
25
26 vector<string> ans;
27 for (int i = 0; i < words.size(); i++) {
28
29 if ( cnt[formatWord( words[i] ) ] == 1) ans.push_back(words[i]);
30 }
31
32 sort(ans.begin(), ans.end());
33 for (int i = 0; i < ans.size(); i++) {
34 cout << ans[i] << endl;
35 }
36 return 0;
37 }
38
39 string formatWord(const string &s) {
40
41 string ans = s;
42 int str_size = ans.size();
43 for (int i = 0; i <str_size; i++) {
44
45 ans[i] = tolower(ans[i]);
46
47 }
48 sort(ans.begin(), ans.end());
49 return ans;
50
51 }
uva156 By sixleaves
时间: 2024-10-26 03:48:58
uva156 By sixleaves的相关文章
UVA156 Ananagrams
问题链接:UVA156 Ananagrams. 题意简述:输入一个文本文件,从中提取出一些单词输出,输出的单词按照文本文件中的原来样子输出(字母大小写不变).对于所有的单词,若字母不分大小写,单词经过重排顺序,与其他单词相同,这些单词则不在输出之列. 这个问题用C++语言编写程序,主要是为了练习使用STL的功能.另外一点,C++编写程序效率会更高. 程序中,使用了容器类map和vector.其他都是套路. AC的C++语言程序如下: /* UVA156 Ananagrams */ #includ
uva156反片语
背景:学习stl过程中遇到的简单题,但我不会. 思路:将单词标准化,然后就可以运用映射map了. #include <iostream> #include <string> #include <cctype> #include <vector> #include <map> #include <algorithm> using namespace std; map<string,int> cnt; vector<st
uva12096 The SetStack Computer By sixleaves
代码 1 #include <set> 2 #include <string> 3 #include <vector> 4 #include <map> 5 #include <stack> 6 #include <iostream> 7 #include <algorithm> 8 #define ALL(x) x.begin(), x.end() 9 #define INS(x) inserter(x, x.begi
uva540 Team Queue by sixleaves
这道题目.主要是对队列的灵活应用.其实就是一道模拟题目,只要你洞察出题目的本质就十分简单.题目意思大体是有多组测试数据,每组的一开始是一个数字t,代表一共有多少的团队,接着是t行输入,每一行都由一个数字n开头,表示队伍的人数.在这之后,输入诺干行的操作指令,E x代表入编号为x的入队列,这里的队列是一个新的而且只有一个的新队列.D代表就是出队列.同时输出该元素.S表示停止模拟.题目的具体要求是,每次入队里前,先从队列头扫描到队列尾,如果队列里有队友,就排在队友们的最后面(不是该队友的后面,是整队
UVA 400 Unix ls by sixleaves
题目其实很简单,答题意思就是从管道读取一组文件名,并且按照字典序排列,但是输入的时候按列先输出,再输出行.而且每一行最多60个字符.而每个文件名所占的宽度为最大文件名的长度加2,除了输出在最右边的文件名的宽度是最大文件名长度之外.编程实现这个功能,这就是Unix系统下ls命令的一部分而已.具体实现如下.主要学习的技能要点就是如何用偏移位移法来按列输出.如果一个矩阵n行m列,要按照列输出.但是我们知道,编程时候,只能是for(行)在列.所以必须要有一个偏移量来计算这种偏移关系.x = rows *
UVa156 Ananagrams (STL)
链接:http://acm.hust.edu.cn/vjudge/problem/19294分析:map容器的应用.map容器按key值从小到大排序,所以自定义类型作为key时要定义“小于”运算符,还有map重载“[]”运算符,可以像数组一样使用.将每个单词“标准化”(将字母转换成小写并按字典序从小到大),cnt记录每个“标准化”后单词的个数,words保存出现过的所有单词,最后遍历words数组,将“标准化”后只出现一次的单词保存最后按字典序排序后输出. 1 #include <iostrea
uva10815 by sixleaves
题目很简单.其实stringstream就的用法和iosteam差不多,所以学习起来是很简单的.stringstream类里面有一个string缓存,str()和str(string)成员函数.前者用于把stringstream的返回string缓存,后者是把string对象包装成stringstream对象.stringstream类存在于sstream头文件中.其是独立于标准I/O但有类似功能的类.clear主要是为了多次使用stringstream,因为stringstream每次的构造都
uva 101 by sixleaves
这是一道很好的模拟题,用vector<int> p[maxn],建立模型,映射为maxn个堆.主要要掌握vector模拟堆操作的简单方法.接下来得思路是自顶向下的方式,逐步完善程序.首先根据提议列出下表.1.move a onto bclear_above(a) && clear_above(b);insert a above b; 2.move a over bclear(a)insert a above bs 3.pile a onto bclear(b)insert as
uva 1589 by sixleaves
坑爹的模拟题目.自己对于这种比较复杂点得模拟题的能力概述还不够,还多加练习.贴别是做得时候一直再想如何检查车中间有没有棋子,炮中间有没有棋子.到网上参考别人的代码才发先这么简单的办法,自己尽然想不到.多加练习,总结下该题目吧. 1 #include <stdio.h> 2 #include <string.h> 3 #define N 12 4 5 char brd[N][N]; 6 int dx[] = {1,-1,0,0}, dy[] = {0,0,1,-1};