codeforces 1045I Palindrome Pairs 【stl+構造】
阿新 • • 發佈:2018-11-05
codeforce ac代碼 技術 ref lld namespace set force img
題目:戳這裏
題意:給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;View Code10 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(intj = 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 }
codeforces 1045I Palindrome Pairs 【stl+構造】