UVa156 Ananagrams (STL)

链接:http://acm.hust.edu.cn/vjudge/problem/19294分析:map容器的应用。map容器按key值从小到大排序,所以自定义类型作为key时要定义“小于”运算符,还有map重载“[]”运算符,可以像数组一样使用。将每个单词“标准化”(将字母转换成小写并按字典序从小到大),cnt记录每个“标准化”后单词的个数,words保存出现过的所有单词,最后遍历words数组,将“标准化”后只出现一次的单词保存最后按字典序排序后输出。
 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <map>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 vector<string> words;
 9 map<string, int> cnt;
10
11 string repr(const string& s) {
12     string ans = s;
13     for (int i = 0; i < s.length(); i++)
14         ans[i] = tolower(ans[i]);
15     sort(ans.begin(), ans.end());
16     return ans;
17 }
18
19 int main() {
20     string s;
21     while (cin >> s) {
22         if (s[0] == ‘#‘) break;
23         words.push_back(s);
24         string r = repr(s);
25         if (!cnt.count(r)) cnt[r] = 0;
26         cnt[r]++;
27     }
28     vector<string> ans;
29     for (int i = 0; i < words.size(); i++)
30         if (cnt[repr(words[i])] == 1) ans.push_back(words[i]);
31     sort(ans.begin(), ans.end());
32     for (int i = 0; i < ans.size(); i++)
33         cout << ans[i] << endl;
34     return 0;
35 }
 
时间: 2024-12-24 21:39:57

UVa156 Ananagrams (STL)的相关文章

UVa10815 Andy&#39;s First Dictionary (STL)

链接:http://acm.hust.edu.cn/vjudge/problem/18649分析:set容器应用.set中每个元素最多只出现一次.自定义类型也可以构造set,必须定义“小于”运算符.set中的元素从小到大已排好序. 1 #include <iostream> 2 #include <string> 3 #include <cctype> 4 #include <set> 5 #include <sstream> 6 using n

标准模板库(STL)

1.标准模板库(STL):是为了提供通用的模板,这部分代码都是优质的代码,提高了编程人员的开发效率 2.vector向量:本质上来说对数组的封装:特点是在常数时间内完成读取:插入比较复杂:通过迭代器进行遍历 初始化vector向量的几种方式: vector<T> v1:vector保存类型为T的对象.默认构造v1为空 vector<T> v2(v1):v2是v1的一个副本 vector<T> v3(n,i):包含n个值为i的元素 vector<T> v4(n

.NET中是否可用标准模版库(STL)

分析问题 标准模版库(STL)实在惠普实验室开发出来的一套算法类库的集合,从概念上主要区分为三大部分: 1.算法(algorithm). 2.容器(container). 3.迭代器(iterrator). STL的设计都致力于打造通用的算法和类库,例如一个排序的算法,可能针对包含不同类型元素的集合进行排序.在C++中,这样的通用性需要依靠模版来实现,而在.NET中,则依靠泛型..NET中的STL类库有Wintellect团队开发完成,类库名称为Power Collections,作为一个通用的

C++标准模版库(STL)双向链表(list)的使用

双向链表是一个常用的数据结构.它并不复杂,如果我们要自己实现也不是太困难的事情.但既然STL已经给我们提供了一个,不妨直接用.这样做,不但省时省力,而且代码的复用性也好. 头文件与模板类 要想使用STL提供的双向链表,需要包含头文件 #include <list> 这样,便可以使用模板类list<T>. 初始化 初始化一个list很简单,用 std::list<T> L; 便可以初始化一个空的链表.用 std::list<T> L{ t1, t2, t3 }

C++标准模板库(STL)学习

1.什么是标准模板库STL(Standard Template Lib) 在之前已经学习过函数模板和类模板的声明和使用方法,之前的模板都是程序员自己根据自己的需求来设计的,从自己去声明这个模板的到最后去使用 模板都是自己完成的:而这些标准模板库并不是我们自己写的,而是一些大神们写的,因为他们在编程的过程中,经常会使用一些常用的模板,而每次 都需要去重复创建模板,久而久之,这些大神们就会将这些常用又很使用的模板做成一个模板库的形式,也就形成了现在使用的标准模板库STL.跟我 们的标准函数库一样,也

离散化——化不可能为可能(STL)

所谓离散,就是化连续为不连续,使得我们某种枚举的方法得以实现. 当然,离散还能够帮助我们将某些数据范围很大达到2^16,但是这些数据并不多(例如才1000+),我们可以把数据进行离散,保持他们之间的相对大小. 例如这里有几个数:4865845,146384512,598745,896561634,4865845 我们先对数进行排序:598745,4865845,4865845,146384512,896561634 离散后就变成了:0,1,1,2,3(1,2,2,3,4也行) 我们不仅可以将很大

C++ 标准模板库介绍(STL)

1. STL 基本介绍 C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类.STL的目的是为了标准化组件,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归. STL的版本很多,常见的有HP STL.PJ STL. SGI STL等,另外,STL库属于C++标准库的一部分,两者是包含关系. 由于我平时的编程环境主要在Linux系统下,所以在后面总结中,我会主以GNU ISO C++ Library中的STL源码(5.2.1版本)为

cache(STL)

cache Description 栗酱在上操作系统原理这门课. 她遇到了一个内存管理的置换策略上的问题. 问题可以简化成,有一个单线程程序,有nn步执行,每步执行需要调用第a_iai?个数据.不同的数据的大小相同.根据数据的大小,你被分配了mm页内存,每页内存可以装取一个数据. 一开始所有的数据都在硬盘(虚拟内存)里存储.当程序需要调用第a_iai?个数据的时候,栗酱的老爷机需要使用整整11秒钟把内存的数据移出,再从硬盘里读出数据,并覆盖写入到某一格内存中. 程序在每步执行过程中,需要调用的数

leetcode_31题——Next Permutation(STL)

下面摘抄的别人的讲解非常清楚 最近刷leetcode的时候遇见next permutation这道题,感觉挺有意思的一个题目,递归的方法是较简单并且容易想到的,在网上搜了其余的解法,就是std::next_permutation非递归解法,但是让人不是很舒服的就是关于原理的部分,千篇一律的都是摘抄<STL源码剖析>,也就是这样的. 在当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i < *ii.然后再从尾端寻找另一个元素*j,如果满足*i <