1. 程式人生 > >Bubble Cup 11 - Finals [Online Mirror, Div. 2], problem (H) Palindrome Pairs 字元處理優化

Bubble Cup 11 - Finals [Online Mirror, Div. 2], problem (H) Palindrome Pairs 字元處理優化

此題是字元處理,兩兩列舉判斷時間複雜度為O(n2),不能滿足要求,可以利用小寫字母只有26個可以優化時間複雜度。如果字串字母都為偶數或者只有一個字母為奇數,則兩兩符合條件。統計每個字串奇數字母並記錄再根據上述條件求解即可,時間複雜度為O(n)。
ac程式碼:

#include <bits/stdc++.h>
#define FOR(I,A,B) for(int I = (A); I < (B); I++)
#define FORE(I,A,B) for(int I = (A); I <= (B); I++)
#define PRII pair<int,int> 
#define LL long long #define INF 1000000001 #define N 200005 using namespace std; int n; map<int,int>m; LL ans; int main() { cin >> n; FORE(i,1,n){ string s; int w = 0; cin >> s; FOR(j,0,s.length()) w^=1<<(s[j]-'a'); ans+=m[w]; FOR(j,0,26){ if(m.find(w^(1<<j)) != m.
end()) ans+=m[w^(1<<j)]; } m[w]++; } cout << ans << endl; return 0; }