算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)
题目大意:
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排列。
题目(提交)链接→UVa-156
没使用过该网站的同学请猛戳这里→vJudge教程
储备知识:
1、标准化:
将一个字符串中所有字母化简为小写,并按其字典序排列的过程叫标准化。
2、map的基本用法→map头文件函数详解
3、tolower函数出处→ctype头文件函数详解
4、sort、count函数出处→algorithm头文件函数详解
分析:
此题大水题,想要做出来不难,但如果想找到最优解,难度就上升一个档次了。尤其是map+vector配合标准化的写法,以及最后以空间换时间的思想,都是值得借鉴和学习的。
思路:
vector1存放输入串,将每个串的标准化存入map.key,出现次数存入map.value;输入结束后遍历vector1与map1,若vector1中串出现次数等于1,就存入vector2串。 最后给vector2串排序,输出。
代码:
#include <bits/stdc++.h>
using namespace std;map<string,int> cnt;
vector<string> words;//将单词s进行“标准化”
string repr(const string& s) { //传递参数时加const可以避免参数被意外修改 string ans = s;for(int i = 0; i < ans.length(); i++) ans[i] = tolower(ans[i]);sort(ans.begin(), ans.end());return ans;
}
int main() {int n = 0;string s;while(cin >> s) {if(s[0] == '#') break;words.push_back(s);string r = repr(s);if(!cnt.count(r)) cnt[r] = 0;cnt[r]++;}vector<string> ans;for(int i = 0; i < words.size(); i++) if(cnt[repr(words[i])] == 1) ans.push_back(words[i]);sort(ans.begin(), ans.end()); //空间换时间for(int i = 0; i < ans.size(); i++) cout << ans[i] << "\n"; return 0;
}
收获:
1、map映射的用法
2、标准化的用法
算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)相关推荐
- 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)
本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...
- 算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)
提目(提交)链接→UVa-133 百度翻译→百度翻译 没使用过该网站的同学请猛戳这里→vJudge教程 分析: 最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周 ...
- 算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)
大家站在出题者的角度考虑,我们出了一道大水题,会让它又臭又长或是用复杂的函数吗? 不会.所以做这种题千万不要想得太复杂.循环+数组足矣. 提目(提交)链接→UVa-489 百度翻译→百度翻译 没使用过 ...
- 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)
概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写. 储备知识: 1.sstring头文件的用法→sstring头文件函数详解 2.cctype头文件的用法→ccty ...
- 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
大意: 输入n,代表n个木块,输入最多n种操作类型,按类型对木块进行操作,读入quit结束 输入输出格式: 1.move a onto b:将a和b所在上方的方块先归位,再将a移到b所在柱子 2.mo ...
- 算法竞赛入门经典(第二版) | 例题5-1 大理石在哪 (普适查找)(UVa10474,Where is the Marble?)
大意: 给一序列,要求先将序列排序.再给n个数字,找到每个数字在序列中的位置 储备知识→algorithm头文件函数详解 题目(提交)网址→UVa-10474 百度翻译→百度翻译 没使用过该网站的同学 ...
- 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)
大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...
- 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)
大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...
- UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...
最新文章
- python对于办公有什么帮助-日常工作中python能够有哪些帮助?
- 第五课 路由之初识路由
- CAP理论与MongoDB一致性、可用性的一些思考
- linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
- 2.4g和5g要不要合并_请问千兆路由器,2.4g与5g是双频合一还是分开,该选择哪个?...
- 面试常考题:不调用库函数,怎样实现字符串操作函数?
- [C] memset 初始化结果全为 -1
- bzoj2783: [JLOI2012]树
- 50个提高会话技巧的方法 (转IT经理人)
- 好用的服务器终端,推荐7款超级好用的终端工具 —— SSH+FTP
- 信息系统项目管理师之选择题、案例分析题备考
- 华三基础命令(单臂,超级vlan,远程,聚合)
- matlab推挽用的变压器,推挽逆变+全桥整流~~~~逆变器变压器设计
- 支付宝App支付源码
- 成功实现有线路由器和无线路由器连接上网
- js12---闭包,原型,继承
- 高数知识梳理——函数的连续性与间断点
- python剔除数据_python实现对excel进行数据剔除操作实例
- 基于切比雪夫空间距离的空间跳跃体绘制加速方法(Empty Space Skipping-ESS)
- 一文读懂Apache Kylin(麒麟)