http://write.blog.csdn.net/mdeditor
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#define maxs 100010
#define MME(i,j) memset(i,j,sizeof(i))
using namespace std;
struct input
{
char primary[40];//输入的初始字符串
char sort_word[40];//排序好的字符串
}f[30500];
int input_cmp(input a,input b)
{
if( !strcmp(a.sort_word,b.sort_word) )
return strcmp(a.primary,b.primary)<0;
else return strcmp(a.sort_word,b.sort_word)<0;
}
struct group
{
char primary[40];//存放的是初始的字符串
int num; //sort之后出现次数
int begins; //这个串出现的起始位置
}G[30020];
int groupcmp(group a,group b)
{
if(a.num==b.num)
return strcmp(a.primary,b.primary)<0;
else return a.num>b.num;
}
int main()
{
int k=0;
while(~scanf("%s",f[k].primary))
{
int len=strlen(f[k].primary);
strcpy(f[k].sort_word,f[k].primary);
sort(f[k].sort_word,f[k].sort_word+len);
k++;
}
sort(f,f+k,input_cmp);
strcpy(G[0].primary,f[0].primary);
G[0].num=1;
G[0].begins=0;
int groupnum=1;
for(int i=1;i<k;i++)
{
if( strcmp(f[i].sort_word,f[i-1].sort_word)==0 )
G[groupnum-1].num++;
else
{
G[groupnum].num=1;
strcpy(G[groupnum].primary,f[i].primary);
G[groupnum].begins=i;
groupnum++;
}
}
sort(G,G+k,groupcmp);
/*for(int i=0;i<k;i++)
printf("Primary is %s size is %d\n",G[i].primary,G[i].num);
puts("");*/
int pos;
for(int i=0;i<5;i++)
{
printf("Group of size %d:",G[i].num);
pos=G[i].begins;
bool flag=0;
for(int j=0;j<G[i].num;j++)
{
flag=0;
for(int k=j-1;k>=0;k--)
{
if(strcmp(f[k].primary,f[j].primary)==0)//初始一样的字符串只输出一次
{
flag=1;
break;
}
}
if(!flag)
printf(" %s",f[j+pos].primary);
}
puts(" .");
//puts( f[G[i].num-1].primary );
}
return 0;
}