首页 > 其他 > 详细

codeforces 1045I Palindrome Pairs 【stl+构造】

时间:2018-11-05 18:54:04      阅读:143      评论:0      收藏:0      [点我收藏+]

题目:戳这里

题意:给1e5个字符串,问有多少对字符串组合,满足最多只有一种字符有奇数个。

解题思路:每种情况用map存一下就行了。感觉这题自己的代码思路比较清晰,所以写个题解记录一下

附ac代码:

技术分享图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 2e5 + 10;
 5 const ll mod = 998244353;
 6 int arr[33];
 7 int nu[maxn];
 8 int now;
 9 string st;
10 map<int, int> mp;
11 int main() {
12     ios::sync_with_stdio(false);
13     int n;
14     cin>>n;
15     for(int i = 1; i <= n; ++i) {
16         memset(arr,0,sizeof(arr));
17         cin>>st;
18         now=0;
19         for(int j = 0; j < st.size(); ++j) {
20             arr[st[j]-a]++;
21         }
22         for(int j = 0; j < 26; ++j) {
23             if(arr[j]&1) now += 1<<j;
24         }
25         ++mp[now];
26         nu[i] = now;
27     }
28 
29     int od = 0;
30     ll ans = 0;
31 
32     for(int i = 1; i <= n; ++i) {
33         od = 0;
34         for(int j = 0; j < 26; ++j) {
35             if(nu[i]&(1<<j)) ++od;
36         }
37         if(od == 0) {
38             ans += mp[nu[i]] - 1;
39             for(int j = 0; j < 26; ++j) {
40                 ans += mp[1<<j];
41             }
42         }
43         else {
44             ans += mp[nu[i]] - 1;
45             for(int j = 0; j < 26; ++j) {
46                 ans += mp[nu[i]^(1<<j)];
47             }
48         }
49     }
50     printf("%lld\n", ans / 2ll);
51     return 0;
52 }
View Code

 

codeforces 1045I Palindrome Pairs 【stl+构造】

原文:https://www.cnblogs.com/zmin/p/9910525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!