Anagram Groups(字符串)

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2316

理解错一点题意就能WA到死。。。题中对于重复的单词,只输出一个,但是重复的单词个数要加上

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <string>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <map>
 8 using namespace std;
 9 const int N=100010;
10 int vis[N];
11 vector<string>v[N];
12 map<string,int>mp;
13 struct node
14 {
15     int Size;
16     int num;
17     friend bool operator < (node a,node b)
18     {
19         if (a.Size == b.Size)
20         {
21             return v[a.num][0] < v[b.num][0];
22         }
23         return a.Size > b.Size;
24     }
25 } G[N];
26 int main()
27 {
28     string s[N],s2[N];
29     char ss[N];
30     int  i = 0;
31     mp.clear();
32     while(scanf("%s",ss)!=EOF)
33     {
34         if(ss[0]=='0')
35             break;
36         mp[ss]++;
37         if(mp[ss]==1)
38         {
39             s[i] = ss;
40             sort(ss,ss+strlen(ss));
41             s2[i++] = ss;
42         }
43     }
44     int n = i;
45     int p = 0;
46     memset(vis,0,sizeof(vis));
47     for (int j = 0; j < n; j++)
48     {
49         if (vis[j])
50             continue;
51         int Size = 0;
52         for (int k = j; k < n; k++)
53         {
54             if (s2[j]==s2[k])
55             {
56                 vis[k] = 1;
57                 v[p].push_back(s[k]);
58                 if(mp[s[k]]>1)
59                     Size+=mp[s[k]]-1;
60             }
61         }
62         G[p].Size = v[p].size()+Size;
63         G[p].num = p;
64         sort(v[p].begin(),v[p].end());
65         p++;
66     }
67     sort(G,G+p);
68     if (p > 5)
69         p = 5;
70     for (int j = 0; j < p; j++)
71     {
72         printf("Group of size %d:",G[j].Size);
73         for (int k = 0; k < v[G[j].num].size(); k++)
74         {
75             cout<<" "<<v[G[j].num][k];
76         }
77         printf(" .\n");
78     }
79     return 0;
80 }
View Code

 

转载于:https://www.cnblogs.com/lahblogs/p/3527073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值