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;
}

【图灵杯 J】简单的变位词的更多相关文章

  1. 图灵杯 E 简单的RMQ(UVA 11235)(RMQ)

    E: 简单的RMQ 时间限制: 2 Sec  内存限制: 64 MB提交: 934  解决: 165[提交][状态][讨论版] 题目描述 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i, ...

  2. “《编程珠玑》(第2版)第2章”:C题(查找变位词,排序)

    C题是这样子的: 给定一个英语字典,找出其中的所有变位词集合.例如,“pots”.“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到. 下段分析摘自该书(P1 ...

  3. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)A蔡老板的会议

    题目描述 图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会.综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办 ...

  4. 005推断两个字符串是否是变位词 (keep it up)

    写一个函数推断两个字符串是否是变位词. 变位词(anagrams)指的是组成两个单词的字符同样,但位置不同的单词.比方说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们能够排序然后对照 ...

  5. [LeetCode] 242. Valid Anagram 验证变位词

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...

  6. 剑指Offer:互为变位词

    // 判断两个单词是否互为变位词: 如果两个单词中的字母相同,并且每个字母出现的次数也相同, 那么这两个单词互为变位词 #include <stdio.h> #include <st ...

  7. Leetcode 242. Valid Anagram(有效的变位词)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = & ...

  8. [Swust 549]--变位词(vector水过)

    Time limit(ms): 1000 Memory limit(kb): 65535   Description 输入N和一个要查找的字符串,以下有N个字符串,我们需要找出其中的所有待查找字符串的 ...

  9. 变位词(0029)-swustoj

    变位词(0029)水题 变位词如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词.如tea 与eat , nic 与cin, ddc与dcd, a ...

随机推荐

  1. C# 上位机的USB设备拔插检测

    我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C ...

  2. thinkPHP的Excel插件

    原文地址 http://www.thinkphp.cn/topic/14005.html 总结的注意事项 1实例化第三方类,要在类名前加\ ,不然引用地址不对. 实现步骤:一:在http://phpe ...

  3. Having用法

    HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似.WHERE 搜索条件在进行分组操作之前应用:而 HAVING 搜索条件在进行分组操作之后应用 ...

  4. sql 语句中的 (+) 是什么意思?

    在select语句中(+)指的是外连接,是连接查询的一种方法.例:select t1.*,t2.* from dept t1,emp t2 where t1.deptno=t2.deptno(+);其 ...

  5. vue2 router中的 @ 符号表示src

    vue2 router中的 @ 符号表示src 学习了:https://segmentfault.com/q/1010000009549802 这个是webpack起的别名: 在build/webpa ...

  6. [CSS3] Create Dynamic Styles with CSS Variables

    In this lesson we are going to use CSS variables to keep our application's colors consistent. This i ...

  7. [Angular] Fetch non-JSON data by specifying HttpClient responseType in Angular

    By default the new Angular Http client (introduced in v4.3.1) uses JSON as the data format for commu ...

  8. HDOJ 1874 畅通project续

    畅通project续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. POJ2449题解

    先讲一个为了少打一些代码而滥用继承终于接受慘痛教训的故事. #include <cstdio> #include <algorithm> #include <queue& ...

  10. 修改YOLO使其显示自定义类别

    基本参考自这篇文章(http://blog.csdn.net/ma3252788/article/details/74659230),主要用来记录下自己遇到的问题 根据@赤战约风 的帖子做如下修改可以 ...