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 .

【题目链接】:http://oj.acmclub.cn/problem.php?cid=1162&pid=9

【题意】

【题解】

输入的每个单词,将它复印一份;
复印的那一份把它sort(s.begin(),s.end())处理;
这样就能把同一类的归到一起了;
dic< string,vector < string >>强搞就可以了;
然后把每一个出现过的单词(排序处理过后的单个字符)都记录一下;(去重后)
然后按照dic< string >那个vector的大小降序排;
(记录原来字符串的id和出现次数就好);
然后按照题目所说的字典序去搞;
这里出现次数一样的情况,字典序小的先,我是把要输出的东西都弄成字符串(string类),然后再强行排个序..
去重就不用说了,很简单的
(不一定是取前5个字符,可能第5大的字符有很多个,远远超过了5个呢?或者第3大的字符就超过5个了..你得在其中找字典序最小的)

【Number Of WA】

1

【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0),cin.tie(0)typedef pair<int,int> pii;
typedef pair<LL,LL> pll;const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 3e4+100;struct abc{int id,num;
};string s,ts[N],b[N];
map <string,vector <string> > dic;
int n;
abc a[N];int main(){//Open();Close();while (cin >> s){string temp = s;sort(temp.begin(),temp.end());if (dic[temp].empty()) ts[++n] = temp;dic[temp].pb(s);}rep1(i,1,n){a[i].num = dic[ts[i]].size();a[i].id = i;}sort(a+1,a+1+n,[&] (abc a,abc b){return a.num>b.num;});int num = 0;rep1(i,1,n){int j = i;while (j+1<=n && a[j+1].num==a[i].num) j++;rep1(ii,1,j-i+1){b[ii]="";string temp = ts[a[i+ii-1].id];sort(dic[temp].begin(),dic[temp].end());rep1(j,0,a[i+ii-1].num-1){int k = j;while (k+1<=a[i+ii-1].num-1 && dic[temp][k+1]==dic[temp][j]){k++;}b[ii]+=dic[temp][j];b[ii]+=' ';j = k;}b[ii]+='.';}sort(b+1,b+1+(j-i+1));rep1(ii,1,j-i+1){cout <<"Group of size "<<a[i].num<<": "<<b[ii]<<endl;num++;if (num==5) return 0;}i = j;}return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7626257.html

【图灵杯 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. 神马搜索上线奥运会人气榜单 中国女排包揽前三
  2. 用shell写了一个自动编译代码的脚本
  3. Python入门100题 | 第005题
  4. Angular Component 开发时属性和运行时属性的对照
  5. serverless搭建html,基于ServerLess的极简网页计数器:源码分析与实践
  6. Request的学习笔记(属Servlet学习课程)
  7. RuntimeError: size mismatch, m1: [80 x 4], m2: [320 x 50] at ..\aten\src\TH/generic/THTensorMath.cpp
  8. opengl多重纹理映射
  9. Eval绑定日期时,修改日期显示的格式
  10. vue,computed,计算属性
  11. linux系统编码启动,Linux启动流程介绍
  12. solr4.3纠错源码学习二——基于主索引
  13. 被判赔联想525万,常程方回应:提起诉讼;百度自动驾驶出租车在京全面开放;VS Code 1.50版发布|极客头条
  14. 传输请求时报信息对象0REQ_CDATE不存在
  15. 在没有鼠标或键盘的情况下在 Mac 上如何启用蓝牙?
  16. 绘制电气电路中的电阻——Visio制图总结【电控类】(二)
  17. windows xp输入法设置空白解决的方法
  18. 单片机c语言双电源程序,基于单片机的双电源自动切换开关控制器
  19. WPF高性能绘图之DrawingCanvas、DrawingVisual、Button的同时使用
  20. android 加载高德地图api,Android应用引入高德地图API

热门文章

  1. 从零开始Tableau | 11.表计算-计算依据
  2. 10 windows 启动虚拟机报错_VirtualBox5.0安装Windows10虚拟机启动失败
  3. Macbook 安装Android Studio以及解决卡顿问题
  4. 支付宝APP支付Java服务端
  5. matlab绘制风场图(矢量图、箭头图)
  6. Hibernate中的方言
  7. Kettle连接MySQL数据库找不到驱动问题解决
  8. C语言之简单的字母大小写转换
  9. 办公室业务杂志办公室业务杂志社办公室业务编辑部2022年第18期目录
  10. HDOJ 2026 首字母变大写