Bubble Cup 11 - Finals [Online Mirror, Div. 2], problem (H) Palindrome Pairs 字元處理優化
阿新 • • 發佈:2018-11-19
此題是字元處理,兩兩列舉判斷時間複雜度為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;
}