codeforces 1045I Palindrome Pairs stl+构造

Posted zmin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 1045I Palindrome Pairs stl+构造相关的知识,希望对你有一定的参考价值。

题目:戳这里

题意:给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
", ans / 2ll);
51     return 0;
52 }
View Code

 

以上是关于codeforces 1045I Palindrome Pairs stl+构造的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #764 (Div. 3)

Codeforces Round #764 (Div. 3)

Codeforces Round #764 (Div. 3)

数据结构与算法随笔:LeetCode算法练习

codeforces上怎么看测试数据

如何看codeforces做了多少题