【hash】A Horrible Poem】的更多相关文章

[题目链接] # 10038. 「一本通 2.1 练习 4」A Horrible Poem [参考博客] A Horrible Poem (字符串hash+数论) [题目描述] 给出一个由小写英文字母组成的字符串 SS,再给出 qq 个询问,要求回答 SS 某个子串的最短循环节.如果字符串 BB 是字符串 AA 的循环节,那么 AA 可以由 BB 重复若干次得到. [算法]-首先对于长度为 lenlen 的子串,循环节长度为 xx 的充要条件:[1,len−x][1,len−x]串的哈希值等于 …
题目大意 给出一个由小写英文字母组成的字符串 S,再给出 q 个询问,要求回答 S 某个子串的最短循环节. 如果字符串 B 是字符串 A 的循环节,那么 A 可以由 B 重复若干次得到. 输入格式 第一行一个正整数 n,表示 S 的长度. 第二行 n 个小写英文字母,表示字符串 S . 第三行一个正整数 q ,表示询问个数. 下面 q 行每行两个正整数 a,b,表示询问字符串 S[a..b] 的最短循环节长度. 输出格式 依次输出 q 行正整数,第 i 行的正整数对应第 i 个询问的答案. 输入…
题解: 询问区间的整循环节 设区间长度为$n$ 如果有循环节长为$x$和$y$,那由斐蜀定理得$gcd(x,y)$也一定为一个循环节: 假设最小的循环节长为$mn$,那么对于任何循环节长$x$,一定$mn | x$ , 否则$gcd(mn,x)<mn$矛盾 推出$\frac{n}{x} | \frac{n}{mn}$ 所以每次提出$n$的一个质因子$p$,考虑是否可以分成$p$段,如果可以$n=\frac{n}{p}$继续找: 最后得出来的$n$就是最短的循环节: 分解质因子可以$O(n)$线筛…
[题目大意] 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0.求这个方程在[1,m]内的整数解(n和m均为正整数). [思路] *当年考场上怒打300+行高精度,然而没骗到多少orz 然而正解只有60+行 [前铺]f(n) mod p=f(n mod p) mod p 取四个素数,分别对每个ai取模.先预处理x=0..p-1的情况,直接代入多项式计算即可.再在O(m)时间内检验1..m,对于≥p的利用前铺公式可得.如果模四个素数结果均能得到0,说明这个数是方程的解. P.…
[题意]: 给出s串出来,能否找到一个前缀 ,通过多次前缀进行拼接.构成s串.如果有多个,请输出最多次数那个. 如:aaaa 可以用1个a,进行4次拼接 可以用2个a,进行2次拼接 可以用4个a,进行1次拼接 提供两种做法: 第一种是:利用kmp算法中求解  longest prefix table的方法, 找到最后一个位置的上的 p[len-1],如果用总长度减去(len-p[len-1])能否通过这一个前缀来拼接出来. 就是判断是否能整除. #include<bits/stdc++.h>…
图片来源: https://blog.csdn.net/dylan_frank/article/details/78177368 [题意]: 对于每一个节点来说有多少对相同的子树. [题解]: 利用层数进行hash,返回到对应的节点,最后标记后用等差数列来求出所有方案数. #pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; typedef unsigned long long ull ; ; ; vector…
[哈希和哈希表]Seek the Name, Seek the Fame 题目描述 The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same time seek the fame.…
[来源]:bzoj3916 [参考博客] BZOJ3916: [Baltic2014]friends [ 哈希和哈希表]Three Friends [Baltic2014][BZOJ3916]friends [题解] 首先hash整个串,然后分成三种情况,分别是前半段,中间,后半段,三段的字母试图去掉看能否拼起来. 如果可以,那么还需要考虑是否为唯一的. 唯一的意思是: 串S,如果有选择两个不同的串S也能构成这个原串. 代码还是参考别人写的. #include<cstdio> #include…
[链接]:A [题意]:给你n个数的序列和k.判断是否可以三个数组成k(同一个数可以拿多次) [分析]:每个数vis记录一下.2层循环.两数之和不超过k以及剩下的数出现在序列中那么ok. [代码]: #include <bits/stdc++.h> #define ll long long #define pb push_back #define inf 0x3f3f3f3f #define pll pair<ll,ll> #define rep(i,a,b) for(int i=…
[来源] https://loj.ac/problem/2427 [参考博客] LOJ#2427. 「POI2010」珍珠项链 Beads [题解]: 复杂度计算: 暴力枚举k每次计算是n/2+n/3+n/4+...+1的,用调和级数算是…