POJ 2408

题意:对字符串分类,按照每类大小由大到小输出前五个类,没类中相同的字符串只输出一次。

题解:各种STL

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 #include<queue>

 5 #include<string>

 6 #include<map>

 7 #include<set>

 8 using namespace std;

 9 struct data

10 {

11     vector<string> vec;

12 };

13 map<string,int> MP;

14 set<string> CO;

15 data po[50000];

16 bool comp(data a,data b)

17 {

18     int al=a.vec.size(),bl=b.vec.size();

19     if(al!=bl)

20         return al>bl;

21     else

22         return a.vec[0]<b.vec[0];

23 }

24 int main()

25 {

26     MP.clear();

27     char s[50];

28     int num=0,id;

29     while(gets(s))

30     {

31         char cs[50];

32         strcpy(cs,s);

33         sort(cs,cs+strlen(cs));

34         if(MP.find(cs)==MP.end())

35             id=MP[cs]=++num;

36         else

37             id=MP[cs];

38         po[id].vec.push_back(s);

39     }

40     for(int i=1;i<=num;i++)

41         sort(po[i].vec.begin(),po[i].vec.end());

42     sort(po+1,po+num+1,comp);

43     for(int i=1,k;i<=5&&i<=num;i++)

44     {

45         printf("Group of size %d:",k=po[i].vec.size());

46         for(int j=0;j<k;j++)

47         {

48             if(j>0&&po[i].vec[j]==po[i].vec[j-1])

49                 continue;

50             printf(" %s",po[i].vec[j].c_str());

51         }

52         printf(" .\n");

53     }

54     return 0;

55 }

你可能感兴趣的:(poj)