题解 UVA10298 【Power Strings】】的更多相关文章

UVA10298 Power Strings hash+乘法逆元+一点点数学知识 我们用取余法算出主串的hash,然后从小到大枚举子串的长度 显然,如果若干个子串的复制的hash值之和等于主串的hash值,那么答案就得到了. 然后我们计算子串(设子串长度为 i )的hash值: hash=t*(+base^i+base^2i+...+base^(len-i)) 如果直接暴力求,那么显然会TLE 于是我们进行推导: 设: Si=+base^i+base^2i+...+base^(len-i) S=…
题目传送门 Power Strings 格式难调,题面就不放了. 一句话题意,求给定的若干字符串的最短循环节循环次数. 输入样例#1: abcd aaaa ababab . 输出样例#1: 1 4 3 就这样. 分析: 一道思路神奇的题目,需要深入理解$KMP$的$next$数组. 如果自己写几个字符串推一下就可以发现,一个由循环节构成的字符串,从第二个循环节开始$next$值是依次递增的,因为$next$数组的本质是表示$0\~i-1$的最长公共前缀后缀长度.也就不难想到,只要判断一下$nex…
Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为循环节,是可以铺满整串的.而且因为kmp[n]是尽量大的,所以这样得到的循环节长度为所有可能情况中最小的,也就是我们所求的. 而如果n%(n-kmp[n])≠0,可以认为之前的循环节匹配仍然可以进行,但是最后一个循环节被强行割掉了一些. #include<iostream> #include<…
题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入到“.”时结束程序. 输出格式 若干行,为对应的答案. 输入输出样例 输入样例 abcd aaaa ababab . 输出样例 1 4 3 题解 这道题可以用字符串hash或kmp来做. 主要就是要将这道题转换成求最长前缀满足同为后缀. 假设在s[1...n]中,s[1...i]为前缀且s[n-i+…
题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 abcd aaaa ababab . 输出样例#1: 复制 1 4 3 题解 Luogu的题解 这里是对目前最高赞题解结论的证明. 结论:设字符串长度为$n$,最长相同前后缀的长度为$next[i]$, 如$n$%$(n-next[n])=0$,则答案为$n/(n-next[n])$,否则为$1$. 证明: 我们求$next$数组的时候,相当于每次把当前串这样对齐了一下↓ 而$next$求到$n$时,上面…
Power Strings Description - Given two strings a and b we define ab to be their concatenation. For example, if a = "abc" and b = "def" then ab = "abcdef". If we think of concatenation as multiplication, exponentiation by a non…
Power Strings Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submission(s) : 29   Accepted Submission(s) : 14 Problem Description Given two strings a and b we define a*b to be their concatenation. For example,…
Power Strings   Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = &quo…
Power Strings 题意 给出一个字符串s,求s最多由几个相同的字符串重复而成(最小循环节的重复次数) 思路 之前学习KMP的时候做过. 我的思路是:枚举字符串的长度,对于当前长度k,判断\(lcp(1,k+1)>=k\),\(lcp(k+1,2k+1)>=k\),\(lcp(3k+1,4k+1)>=k\)....是否都成立 但这样复杂度有点高,就找了一下题解. 其实只需要判断\(lcp(1,k+1)\)是否是\(n-k\)就可以了. 具体原理如下图: 参考博客 对于\(lcp(…
Power Strings Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 29663Accepted: 12387 Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef…