bzoj 3555: [Ctsc2014]企鹅QQ

hashashashashash….
这题也要看题解,没救了…

#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=(n);i++)
#define si 131
using namespace std;
typedef unsigned long long ll;
const int N=30005;
ll hash[N][205],a[N],ans=0,po[205];
char s[N][205];int n,k;
void solve(int pos){
    rep(i,1,n)a[i]=hash[i][k]-hash[i][pos]*po[k-pos]+hash[i][pos-1]*po[k-pos];
    sort(a+1,a+n+1);int cnt;
    rep(i,1,n){
        if(a[i]!=a[i-1])cnt=0;
        else cnt++;
        ans+=cnt;
    }
}
int main(){//freopen("in.in","r",stdin);
    scanf("%d%d%*d",&n,&k);
    po[0]=1;rep(i,1,200)po[i]=po[i-1]*si;
    rep(i,1,n)scanf("%s",s[i]+1);
    rep(i,1,n)rep(j,1,k){hash[i][j]=hash[i][j-1]*si+s[i][j];}
    rep(i,1,k){
        solve(i);
    }printf("%lld",ans);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值