题目链接
做了好久,没有注意到的一点就是不仔细看样例,害我弄了这么长时间,下次一定注意,
看样例,
看样例,
看样例。
ac代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <math.h>
using namespace std;
struct world
{
char s[40];
char sed[40];
}str[30005];
struct node
{
char s[40];
int num;
int start;
}Node[30005];
bool cmpw(world a,world b)
{
if(strcmp(a.sed,b.sed)==0)
return strcmp(a.s,b.s)<0;
else
return strcmp(a.sed,b.sed)<0;
}
bool cmpn(node a,node b)
{
if(a.num==b.num)
return strcmp(a.s,b.s)<0;
else
return a.num>b.num;
}
int main()
{
int n=0;
while(scanf("%s",str[n].s)!=EOF)
{
int len=strlen(str[n].s);
strcpy(str[n].sed,str[n].s);
sort(str[n].sed,str[n].sed+len);
n++;
}
sort(str,str+n,cmpw);
// for(int i=0;i<n;i++)
// cout<<str[i].sed<<endl;
int a=1;
Node[0].start=0;
Node[0].num=1;
strcpy(Node[0].s,str[0].s);
for(int i=1;i<n;i++)
{
if(strcmp(str[i].sed,str[i-1].sed)==0)
Node[a-1].num++;
else
{
strcpy(Node[a].s,str[i].s);
Node[a].num=1;
Node[a].start=i;
a++;
}
}
sort(Node,Node+a,cmpn);
// for(int i=0;i<a;i++)
// cout<<Node[i].num<<" "<<Node[i].s<<" "<<Node[i].start<<endl;
// for(int i=0;i<n;i++)
// cout<<str[i].s<<endl;
for(int i=0;i<5;i++)
{
// if(i>=n)
// break;
int t=Node[i].start;
// cout<<t<<endl;
printf("Group of size %d:",Node[i].num);
if(i>=a)
{
printf("\n");
break;
}
printf(" %s",str[t].s);
for(int j=1;j<Node[i].num;j++)
{
if(strcmp(str[t+j].s,str[t+j-1].s)==0)
continue;
printf(" %s",str[t+j].s);
}
printf(" .\n");
}
return 0;
}