爱站网挖掘词,网站公司必须帮备案,微信商城网站怎么做,肇庆网站seo正题 题目大意
一个句子有多个单词。 给出了一个加密了的串。加密方法是将不同的单词转换成不同的单词。然后再给一个加密前的串#xff0c;求再加密串中可能出现的最早位置。 解题思路
设aia_iai表示与iii相同的前一个字母的位置。 然后根据题目意思对与两个串如果aaa序列…正题 题目大意
一个句子有多个单词。 给出了一个加密了的串。加密方法是将不同的单词转换成不同的单词。然后再给一个加密前的串求再加密串中可能出现的最早位置。 解题思路
设aia_iai表示与iii相同的前一个字母的位置。 然后根据题目意思对与两个串如果aaa序列一样那么就是可以转换的加密串。所以我们可以用字符串hashhashhash进行匹配。 codecodecode
#includecstdio
#includealgorithm
#includecstring
#includecmath
#includemap
#define ll long long
using namespace std;
const ll XJQ1000000007;
const ll HZB10007;
const ll p19999991;
const ll p21000007;
const ll N1000001;
ll hash1[N],hash2[N],a[N],b[N];
ll len1,len,s,ans;
char c[N];
mapll,ll f;
void pre_work(){hash1[0]hash2[0]1;for(ll i1;iN;i){hash1[i]hash1[i-1]*p1%XJQ;hash2[i]hash2[i-1]*p2%XJQ;}
}
ll work_in(){ll len,s0,s10;lenstrlen(c);for(ll i0;ilen;i){s(s*26c[i]-a)%XJQ;s1(s1*26c[i]-a)%HZB;}return ss1*XJQ;
}
void init(){scanf( %s,c);while(c[0]!$){ll xwork_in();a[len1]f[x];b[a[len1]]len1;f[x]len1;scanf( %s,c);}scanf( %s,c);f.clear();while(c[0]!$){ll xwork_in();ll zf[x];len;s(s*p2)%XJQ;if(z)(shash1[len-z])%XJQ;f[x]len;scanf( %s,c);}
}
void work(){for(ll i1;ilen;i){ans(ans*p2)%XJQ;if(a[i])(anshash1[i-a[i]])%XJQ;}if(anss){printf(1);return;}ll l0;for(ll ilen1;ilen1;i){l;if(b[l]b[l]i)(ans-hash1[b[l]-l]*hash2[i-b[l]-1]%XJQ-XJQ)%XJQ;ans(ans*p2)%XJQ;if(a[i]a[i]l)(anshash1[i-a[i]])%XJQ;if(l29767)l,l--;if(anss){printf(%lld,l1);return;}}printf(0);
}
int main()
{freopen(data.in,r,stdin);pre_work();init();work();
}