码迷,mamicode.com
首页 > 其他好文 > 详细

Gym 100247B Similar Strings(哈希+思维)

时间:2017-12-16 12:53:40      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:lld   ref   name   body   .net   for   int   lan   div   

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 100247B Similar Strings(哈希+思维)

标签:lld   ref   name   body   .net   for   int   lan   div   

原文地址:http://www.cnblogs.com/zyb993963526/p/8046017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!