题目:
题解:
真正感受到了STL的龟速。。。想到了正解:枚举每一位字母,去掉之后扔进hash,看看有多少个相同的
这里用sort都比map快啊!!!
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#define ull unsigned long long
using namespace std;
const int base=1300001ull;
const int N=30005;
char st[N][205];
ull mi[205],Ha[N],ans[N];
int main()
{
int n,m,w,i,cnt=0,j;
scanf("%d%d%d",&n,&m,&w);
mi[0]=1;for (i=1;i<=m;i++) mi[i]=mi[i-1]*base;
for (i=1;i<=n;i++) scanf("%s",st[i]+1);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++) Ha[i]=Ha[i]*base+st[i][j];
int answer=0;
for (j=1;j<=m;j++)
{
for (i=1;i<=n;i++) ans[i]=Ha[i]-st[i][j]*mi[m-j];
sort(ans+1,ans+n+1);
int num=1;
for (i=2;i<=n;i++)
if (ans[i]==ans[i-1]) num++;
else answer+=(num*(num-1))/2,num=1;
answer+=(num*(num-1))/2;
}
printf("%d",answer);
}