Luogu P4503 [CTSC2014] QQ 펭귄

링크
에서 각 문자열이 오른쪽, 오른쪽에서 왼쪽으로 해시 왼쪽 무엇 전처리.
이어서 열거 한 다음 미만 이것을 무시하는 각 문자열에 대한 해시 값을 계산 IS 간과.
다음 단계는 동일한 시퀀스 번호 쌍 같은 정렬 / 해시에 의해 해결 될 수있다 해시 값을 계산하는 것이다.

#include<cstdio>
#include<algorithm>
using std::sort;
using u64=unsigned long long;
const int N=30007,M=207;
char s[M];int n,l,S;
u64 a[N],hl[N][M],hr[N][M];
void hash(int id)
{
    for(int i=1;i<=l;++i) hl[id][i]=hl[id][i-1]*233+s[i];
    for(int i=l;i>=1;--i) hr[id][i]=hr[id][i+1]*235+s[i];
}
int main()
{
    scanf("%d%d%d",&n,&l,&S);int ans=0;
    for(int i=1;i<=n;++i) scanf("%s",s+1),hash(i);
    for(int j=1;j<=l;++j)
    {
        for(int i=1;i<=n;i++) a[i]=hl[i][j-1]*237+hr[i][j+1]*239;
        sort(a+1,a+1+n);
    for(int i=2,p=1;i<=n;++i) a[i]==a[i-1]? ans+=p++:p=1;
    }
    printf("%d",ans);
}

추천

출처www.cnblogs.com/cjoierShiina-Mashiro/p/12220869.html