Gym 100247BSimilar Strings(哈希+思维)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym 100247BSimilar Strings(哈希+思维)相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/Gym-100247B

题意:

如果两个字符串通过映射后是一样的,则说明这两个字符串是相似的,现在给出n个字符串,计算出有多少组字符串是相似的。

 

思路:
直接暴力超时了。。

拿样例来说吧,abacaba可以转化成1213121。那么和它相似的字符串也能转化成这个数字串,比如说tetatet,它映射后也能变成1213121。

这样对每个字符串处理一遍就可以了。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<vector>
 5 #include<map>
 6 using namespace std;
 7 const int maxn = 1e6+5;
 8 
 9 char s[maxn];
10 int used[30];
11 
12 vector<int> v;
13 map<vector<int>, int> mp;
14 
15 int main()
16 {
17     //freopen("in.txt","r",stdin);
18     int n;
19     long long ans = 0;
20     scanf("%d",&n);
21     for(int i=1;i<=n;i++)
22     {
23         scanf("%s",s);
24         int len = strlen(s);
25         int num = 0;
26         memset(used,0,sizeof(used));
27         v.clear();
28         for(int i=0;i<len;i++)
29         {
30             int c = s[i]-a;
31             if(used[c])  v.push_back(used[c]);
32             else
33             {
34                 used[c] = ++num;
35                 v.push_back(used[c]);
36             }
37         }
38         ans+=mp[v]++;
39     }
40     printf("%lld\n",ans);
41     return 0;
42 }

 

以上是关于Gym 100247BSimilar Strings(哈希+思维)的主要内容,如果未能解决你的问题,请参考以下文章

Gym 100247AThe Power of the Dark Side

Gym 100917L Liesbeth and the String 规律&&胡搞

Gym - 101981M:(南京) Mediocre String Problem(回文树+exkmp)

codeforeces GYM 101142 C

Gym - 100971J

codeforces Gym 100735 DEGHI