Description
变位词是指改变某个词的字母顺序后构成的新词。蔡老板最近沉迷研究变位词并给你扔了一道题:
给你一些单词,让你把里面的变位词分组找出来。互为变位词的归为一组,最后输出含有变位词最多的前五组。如果有组数相同的按照字典序输出。

Input
输入包含由小写字母组成的单词,用换行分割,被EOF终止。 输入数据不超过30000个单词。

Output
输出五组包含单词数量最多的变位词,如果少于五组,输出全部。对每组输出,写出它的大小和成员词,成员词按字典序排序用空格分隔,每组输出之间用换行分隔,相同词只输出一次,但算个数。

Sample Input
neuq
tea
bate
beat
caret
trace
nueq
carte
cater
crate
abet
ate
eat
beta
eta
signal
Sample Output
Group of size 5: caret carte cater crate trace .
Group of size 4: abet bate beat beta .
Group of size 4: ate eat eta tea .
Group of size 2: neuq nueq .
Group of size 1: signal .

这个题和字数上一个题差不多,又不太一样,紫书上那个题比这个简单…
我主要是不知道怎么样把互为变位词的归为一组.搜了搜网上的解题报告,感觉像是打开了新世界的大门︿( ̄︶ ̄)︿超棒的。而且他们大多数都是用哈希做的,可惜我还没学,等我学会了再来把那种做法补过来。

#include <cstdio>
#include <map>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>using namespace std;string s, ss;
map<string, int> p;
vector<string> data[31234];bool cmp(vector<string> a, vector<string> b)
{if(a.size() != b.size())return a.size() > b.size();for(int i = 0; i < a.size(); i++){if(a[i] != b[i])return a[i] < b[i];}
}int main()
{int i, head = 1, j;while(cin >> s){ss = s;sort(ss.begin(), ss.end());if(!p[ss]){p[ss] = head++;//不同于以往的p[ss]++, 他是把每一种的单词有一个编号, 我当时一直在想p[ss]++;}data[p[ss]].push_back(s);//这样就把互为变位词的归为了一组;}for(i = 1; i < head; i++){sort(data[i].begin(), data[i].end());unique(data[i].begin(), data[i].end());}sort(data + 1, data + head, cmp);//这个排序也刷新的我的世界观;if(head > 5){for(i = 1; i <= 5; i++){printf("Grop of size %d: ", data[i].size());for(j = 0; j < data[i].size(); j++){cout << data[i][j] << " ";}cout << '.' << endl;}}else{for(i = 0; i < head; i++){printf("Grop of size %d: ", data[i].size());for(j = 0; j < data[i].size(); j++){cout << data[i][j] << " ";}cout << '.' << endl;}}return 0;
}

**图灵杯 J** 简单的变位词相关推荐

  1. 【图灵杯 J】简单的变位词

    Description 变位词是指改变某个词的字母顺序后构成的新词.蔡老板最近沉迷研究变位词并给你扔了一道题: 给你一些单词,让你把里面的变位词分组找出来.互为变位词的归为一组,最后输出含有变位词最多 ...

  2. 《编程珠玑(第2版•修订版)》—第2章2.8节变位词程序的实现(边栏)

    本节书摘来自异步社区<编程珠玑(第2版•修订版)>一书中的第2章2.8节变位词程序的实现(边栏),作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区&quo ...

  3. 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词

    变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...

  4. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)解题报告

    第八届"图灵杯"NEUQ-ACM程序设计竞赛个人赛(同步赛) 题目总结 A题 切蛋糕 题目信息 解题思路 如果我们将 1/k展开到二进制的形式,那么就可以计算出 需要 多少块1/( ...

  5. 浙大python判断两个字符串是否为变位词_算法2----------变位词

    1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...

  6. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛题解

    第八届"图灵杯"NEUQ-ACM程序设计竞赛个人赛题解 先抱怨一下,这场比赛的题锅太多了,而且正赶上状态不好,Ac 1/12就离谱.. H 数羊 给定n,m(1≤n≤109,0≤m ...

  7. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解

    文章目录 7-1 切蛋糕 7-2 小宝的幸运数组 7-3 上进的凡凡 7-4 Seek the Joker I 7-5 Seek the Joker II 7-6 成绩查询ING 7-7 贪吃的派蒙 ...

  8. 第八届“图灵杯”NEUQ—ACM程序设计竞赛个人赛(同步赛)

    A题--切蛋糕 龙龙有一块蛋糕,现在他想将蛋糕平均切成k块,分给他的k名hxd.但是不幸的是,因为龙龙不擅长切蛋糕,他每一次只能将一块蛋糕平均分成两份.例如,将一块大小为1的蛋糕分割成两块大小为1/2 ...

  9. NEUQ图灵杯之A题——蔡老板的会议

    题目意思很简单,就是求最短路,但是,路径是单向的,所以要正着dij一遍,反着dij一遍,再求两次和的最大值,也可以创建两个图,这样,只要对两个图分别dij一遍一次,就不要写两个dij函数了,普通dij ...

最新文章

  1. 7 OC 中class 类的结构
  2. Keras TensorFlow教程:如何从零开发一个复杂深度学习模型
  3. Neko Finds Grapes
  4. 2021第一季度云智能生态技术服务能力盘点
  5. 【BZOJ1452】[JSOI2009]Count(树状数组)
  6. LeetCode 627. 交换工资
  7. 【STM32】【STM32CubeMX】STM32CubeMX的使用之一:工程建立之点亮你的LED
  8. 含有REF CURSOR 的过程只能有一个out参数?
  9. Windows批处理命令
  10. stringbuffer用法 java_StringBuffer的用法
  11. hdu题目分类--第二版
  12. 手把手教你理解SURF算法的全部过程
  13. mysql 查询当月过生日_MySql查询本周/月或下周/月过生日的人
  14. 【B站弹幕游戏开发笔记02】Win10系统下给Python项目导入Protobuf
  15. python求均方根,python中函数的均方根
  16. Fabric 环境搭建时bootstrap.sh帮我们做了什么?
  17. 分布式事务中的那些事——微服务总结(二)
  18. MySQL优化:批量插入大数据4种实用、讲究方案的测试
  19. SSD目标检测的个人总结(1)—— 锚框的生成
  20. 最好的程序员大多是自学成才的

热门文章

  1. CES Asia:足不出户也能享受天文奇观
  2. linux硬件级虚拟机系统 电脑安桌游戏多开完全去除vm标识去虚拟化
  3. 跳出任务管理的泥沼,拥抱甘特图的怀抱
  4. 数据库读写分离的理解
  5. 教师学计算机内容包括哪些,中学计算机教师类论文参考文献 中学计算机教师核心期刊参考文献有哪些...
  6. 正在检测单片机..... 玄学解决方法
  7. 专访阿里视频云叔度:一场技术人的自我修行
  8. 什么是X.509证书?X.509证书工作原理及应用?
  9. Python smtp gmail发送邮件(to,cc)
  10. 黑客基础——基础隐写术