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. PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹

    题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...

  2. No content type provided for validation of a content model---WebLogic问题

    一个web项目,复制到Weblogic domain下的autodeploy目录下,可是从BEA管理控制台中的Deployments下却找不到该项目,奇怪了,这个以前拷过来就可以用的啊?! 查看控制台 ...

  3. linux日常指令、概念

    指令 cal 查看日历date 查看日期bc 计算器ls 查看文件ls -l 查看具体信息(权限,时间等)ls -a 查看所有的文件包括隐藏文件ll 作用同上d* 开头的都是文件夹,- 开头的都是文件 ...

  4. [转载] C 陷阱与缺陷( C traps and Pitfalls )

    本文转自 https://www.xuebuyuan.com/1951579.html 自己找工作过程中复习过的书包括<C traps and Pitfalls>,<编程珠玑> ...

  5. 2019-03-15 使用Request POST获取中加基金的PDF文件,并下载到本地

    import requests import time base_url='http://www.bobbns.com/common-web/cms/content!getContentsInclud ...

  6. Shiro:整合swagger2时需要放行的资源

    filterMap.put("/swagger-ui.html", "anon"); filterMap.put("/swagger-resource ...

  7. Selenium:简单的尝试一下

    一.创建maven工程引入依赖 1)创建项目 创建一个简单的maven工程即可 这里我使用jar项目进行简单的演示 2)引入依赖 <dependencies> <dependency ...

  8. 前端实现input[type='file']上传图片预览效果

    众所周知JavaScript在设计上处于安全角度考虑,是不允许读写本地文件的(原因请自行百度): 但是在实际项目应用中,经常会使用到上传图片,并且可以让用户直接预览图片.对于此种做法有两种方法可以实现 ...

  9. Maven学习总结(24)——Maven版本管理详解

    Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...

  10. js获取当地时间并且拼接时间格式的三种方式

    js获取当地时间并且拼接时间格式,在stackoverflow上有人在问,查了资料,各种方法将时间格式改成任意自己想要的样式. 1. var date = new Date(+new Date()+8 ...