思路
对于一个字符串分别用
a
[
]
,
b
[
]
a[],b[]
a[],b[]来记录每个字符的个数,以及字符串的个数
对答案的贡献就是 在这个字符串前面的
第
一
个
字
符
的
个
数
+
第
二
个
字
符
的
个
数
−
2
∗
字
符
串
个
数
第一个字符的个数+第二个字符的个数-2*字符串个数
第一个字符的个数+第二个字符的个数−2∗字符串个数
因为字符串本身也会贡献两个字符的个数,所以减去
2
2
2 个
int n;
ll a[N],b[N],c[N][N];
void so1ve(){
cin>>n;
ll ans = 0;
mem(a,0);mem(b,0);mem(c,0);
forr(i,1,n){
string s;
cin>>s;
int x = s[0] - 'a';
int y = s[1] - 'a';
ans += (a[x]+b[y]-c[x][y]*2LL);
a[x]++;b[y]++;c[x][y]++;
}
cout << ans << endl;
}