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=Si*(base^i)=base^i+base^2i+base^3i+...+base^len
所以
S-Si=base^len-=Si*(base^i-)
Si=(base^len-)/(base^i-)
我们利用快速幂可以很快地得出结果
但是涉及到取模除法运算,所以我们可以用乘法逆元,这里不详细讲了
根据费马小定理,base^i-1关于mod的乘法逆元为 (base^i-1)^(mod-2)
end.
然鹅更常用的判断循环子串方法在这里:point_here(本题升级版)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
const int mod=1e9+;
const int base=;
char c[];
inline ull ksm(int x,int y){ //快速幂
ull ans=;
for(;y;y>>=){
if(y&) ans=ans*(ull)x%mod;
x=1LL*x*x%mod;
}
return ans%mod;
}
int main(){
do{
scanf("%s",c);
if(c[]=='.') return ;
int ans=,len=strlen(c);
ull tot=,t=;
for(int i=;i<len;++i) tot=(tot*base+(ull)c[i])%mod; //计算主串hash值
for(int i=;i<=len/;++i){
t=(t*base+(ull)c[i-])%mod; //子串hash值
if(len%i) continue; //子串长度不被整除不可能有解
ull tmp=ksm(base,i)-;
ull s=(ksm(base,len)-)*ksm(tmp,mod-)%mod;
if(t*s%mod==tot){ //刚好可以填充
ans=len/i; break;
}
}
printf("%d\n",ans);
}while();
}
UVA10298 Power Strings的更多相关文章
- UVA10298 Power Strings [KMP]
题目传送门 Power Strings 格式难调,题面就不放了. 一句话题意,求给定的若干字符串的最短循环节循环次数. 输入样例#1: abcd aaaa ababab . 输出样例#1: 1 4 3 ...
- 洛谷 UVA10298 Power Strings 题解
Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为 ...
- 「UVA10298」 Power Strings(KMP
题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 abcd aaaa ababab . 输出样例#1: 复制 1 4 3 题解 Luogu的题解 这里是对目前 ...
- POJ 2406 Power Strings (KMP)
Power Strings Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 29663Accepted: 12387 Descrip ...
- POJ 2406 Power Strings
F - Power Strings Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- poj 2406:Power Strings(KMP算法,next[]数组的理解)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 30069 Accepted: 12553 D ...
- POJ 2406:Power Strings
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 41252 Accepted: 17152 D ...
- E - Power Strings,求最小周期串
E - Power Strings Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- poj 2406 Power Strings kmp算法
点击打开链接 Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27368 Accepted: ...
随机推荐
- Saltstack生产案例之Haproxy安装
cd /srv/salt/prod/ mkdir haproxymkdir keepalivedmkdir nginxmkdir phpmkdir memcachedmkdir pkg cd pkg ...
- 江南OJ 1151 - 还是晒太阳 - [状压DP]
题目链接:校内OJ的题目,就不放链接了. PS.可以说是本次9月月赛唯一的一道有一定难度的题目了. 题解: 考虑状压DP,假设 $sta$ 是一个二进制数,代表当前 $n$ 个人有几个是在队伍里的,剩 ...
- easyui-datagrid个人实例
这个实例数据表格的功能,可以实现分页,增删改查功能 1.user.jsp <%@ page language="java" contentType="text/ht ...
- Linux/Unix命令行安装weblogic软件
--通过java -jar wls1036_generic.jar启动安装weblogic软件进程: [weblogic@localhost mnt]$ java -jar wls1036_gener ...
- element 表格元素 超链接
1.在循环体中的事件绑定 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- MTD 移动目标防御技术
移动目标防御技术,主要包括系统随机化,生物启发MTD,网络随机化,云MTD,动态编译等等.研讨会还就威胁建模和量化移动目标防御技术的效能评估进行了推进.理论和定量的模型对于该技术的颠覆性影响至关重要. ...
- compass利用koala在chrome开启scss调试
compass不生成maps文件,所载调试css上,极不方便.看到下图的调试方式,怎么做. 利用用koala来解决,具体步骤如下: 1.确保自己安装了ruby和sass,compass.接着安装 co ...
- Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...
- mysql 数据备份与恢复
1.mysql的备份 命令:"mysqldump -u root -p 数据库名 [表名] > 备份文件名" 不写表名默认备份所有整个数据库. 注意:备份的文件中没有创建数据 ...
- Spark Shuffle Write阶段磁盘文件分析
这篇文章会详细介绍,Sort Based Shuffle Write 阶段是如何进行落磁盘的 流程分析 入口处: org.apache.spark.scheduler.ShuffleMapTask.r ...