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

codeforces 1045I Palindrome Pairs 【stl+构造】

时间:2018-11-05 19:09:10      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:技术分享   ons   size   def   技术   题意   pac   clu   字符串   

题目:戳这里

题意:给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+构造】

标签:技术分享   ons   size   def   技术   题意   pac   clu   字符串   

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

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