添加链接描述
题意:
n 个字符串,两两组合,问有几对能形成 AA 串。
n<=4e5
。
分析:
符合条件的有两种
1.有多个A 串,对答案的贡献是 cnt*(cnt-1)/2
2.有形如 ABA 的串,这时,我们需要寻找 B 串的数量。对答案的贡献就是 B的数量。
我们使用哈希来处理字符串。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
ll mod1=1e9+7,mod2=1e9+9;
ll bas=131;
const int maxn=4e5+5;
pii res[maxn];
map<pii,ll>mp;//计算 个数的
ll ha1[maxn],ha2[maxn],p1[maxn],p2[maxn];
ll get1(int l,int r)
{
return (ha1[r]-ha1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;
}
ll get2(int l,int r)
{
return (ha2[r]-ha2[l-1]*p2[r-l+1]%mod2+mod2)%mod2;
}
pii get(int l, int r)
{
return {
get1(l,r),get2(l,r)};
}
void solve()
{
int tot=0;
p1[0]=p2[0]=1;
for (int i=1;i<maxn;i++)
{
p1[i]=p1[i-1]