4084: [Sdoi2015]双旋转字符串
发布日期:2021-05-06 23:47:44 浏览次数:7 分类:技术文章

本文共 925 字,大约阅读时间需要 3 分钟。

Description

给定两个字符串集合 S 和 T 。其中 S 中的所有字符串长度都恰好为 N ,而 T 中所有字符串长度都恰好为 M 。

且 N+M 恰好为偶数。如果记 S 中字符串全体为 S1,S2,…,STotalS ,而 T 中字符串全体为 T1,T2,…,TT
otalT 。现在希望知道有多少对

题解

hash 给大的集合中的每个字符串 把一段按mid分成两段 ,然后看看要是匹配的话需要小串是什么。。

然后需要的小串用个map记录一下就好了。。
最后累加很简单

CODE:

#include
#include
#include
#include
#include
typedef long long LL;using namespace std;const int MOD=10037;//乘的东西const int MOD1=1000000007; const int N=4000005;int S,T,n,m,o;char ss[N],s1[N];LL shen[N];//前i为的hash值LL KK,KKK;map
q;struct qq{ int x;}s[N*2];int cnt=0;bool cmp (qq a,qq b){ return a.x
>1;//中间端点是什么 KK=1; for (int u=1;u<=2*o-n;u++) KK=KK*MOD%MOD1; KKK=1; for (int u=1;u<=n-o;u++) KKK=KKK*MOD%MOD1; for (int u=1;u<=S;u++) { scanf("%s",ss+1); add(); } int ans=0; for (int u=1;u<=T;u++) { scanf("%s",ss+1); LL p=0; for (int i=1;i<=m;i++) p=((p*MOD)%MOD1+ss[i]-'a')%MOD1; ans=ans+q[p]; } printf("%d\n",ans); return 0;}
上一篇:5000: OI树
下一篇:bzoj3990: [SDOI2015]排序

发表评论

最新留言

很好
[***.229.124.182]2025年04月03日 09时55分09秒