【hash】Power Strings
【题意】:
给出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>
- using namespace std;
- const int N = 1e6 + ;
- char str[N];
- int p[N],len;
- void get_next(char s[]){
- len = strlen( s );
- int i = , j = ;
- p[] = ;
- while( i < len ){
- if( s[i] == s[j] ){
- p[i++] = ++j ;
- }else{
- if( j > ){
- j = p[j-] ;
- }else{
- p[i] = j ;
- i++ ;
- }
- }
- }
- }
- int main()
- {
- while( cin >> str ){
- if( str[] == '.' ) break;
- get_next( str );
- int len = strlen( str );
- printf("%d\n",len % (len-p[len-]) == ?
- len / (len-p[len-]) : );
- }
- return ;
- }
另一种方法就是:
用双hash来实现,双hash处理前缀和,最后用for循环,枚举所有的因数进行处理。
- #include<bits/stdc++.h>
- #define Mp make_pair
- #define F first
- #define S second
- using namespace std;
- const int N = 1e6+;
- const int M1 = 1e9+ , M2 = 1e9+;
- typedef long long ll;
- typedef struct Node{
- long long first ,second;
- Node (){}
- Node ( ll u,ll v){ first = u , second = v ;}
- }PII;
- //typedef pair<ll,ll> PII;
- const PII base{M2,M1},p{M1,M2},One{1ll,1ll},Zero{0ll,0ll};
- PII operator - (PII u,PII v){
- return Node( (u.first-v.first+p.first)%p.first ,(u.second-v.second+p.second)%p.second );
- }
- PII operator * ( PII u , PII v ){
- return Node( (u.first*v.first)%p.first , (u.second*v.second)%p.second );
- }
- PII operator + ( PII u , PII v ){
- return Node( (u.first+v.first)%p.first , (u.second+v.second)%p.second );
- }
- PII operator + ( PII u , int v ){
- return Node( (u.first+v)%p.first , (u.second+v)%p.second );
- }
- bool operator != ( PII u,PII v ){
- return !( u.first == v.first && u.second == v.second );
- }
- PII Pow( PII a ,int b){
- PII ans = One ;
- while( b ){
- if( b& )
- ans = ans * a ;
- b >>= ;
- a = a * a ;
- }
- return ans ;
- }
- PII sum[N];
- char str[N];
- int main()
- {
- ios_base :: sync_with_stdio();
- cin.tie(NULL),cout.tie(NULL);
- while( cin >> str+ ){
- if( str[] == '.') break;
- int len = strlen(str+);
- sum[] = Zero ;
- for(int i=;i<=len;i++)
- sum[i] = sum[i-] * base + str[i];
- int ans = ;
- for(int i=;i<=len/;i++){
- if( len % i ) continue ;
- bool flag = false ;
- for(int j=i ; !flag && j<=len; j+=i ){
- if( sum[j] - sum[j-i] * Pow(base,i) != sum[i] ){
- flag = true ;
- }
- }
- if( !flag ) {
- ans = len/i ;
- break;
- }
- }
- cout << ans << endl ;
- }
- return ;
- }
BKDR
【hash】Power Strings的更多相关文章
- 【POJ2406】 Power Strings (KMP)
Power Strings Description Given two strings a and b we define a*b to be their concatenation. For exa ...
- 【POJ2406】【KMP】Power Strings
Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...
- 【题解】Power Strings
题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入 ...
- 【poj2406】 Power Strings
http://poj.org/problem?id=2406 (题目链接) 题意 给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的, 求 R 的最大值. Solution 后 ...
- 【POJ2406】Power Strings(KMP,后缀数组)
题意: n<=1000000,cas较大 思路:这是一道论文题 后缀数组已弃疗,强行需要DC3构造,懒得(不会)写 ..]of longint; n,m,i,j,len,ans,st:longi ...
- 【SPOJ】Power Modulo Inverted(拓展BSGS)
[SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...
- 【CF913G】Power Substring 数论+原根
[CF913G]Power Substring 题意:T组询问,每次给定一个数a,让你求一个k,满足$2^k$的10进制的后$min(100,length(k))$位包含a作为它的子串.你只需要输出一 ...
- 【POJ 2406】 Power Strings
[题目链接] 点击打开链接 [算法] KMP 如果字符串中存在循环节,则next[len] = (循环节个数 - 1) * 循环节长度 循环节个数 = len / (len - next[len]) ...
- 【poj 2406】Power Strings 后缀数组DC3模板 【连续重复子串】
Power Strings 题意 给出一个字符串s,求s最多由几个相同的字符串重复而成(最小循环节的重复次数) 思路 之前学习KMP的时候做过. 我的思路是:枚举字符串的长度,对于当前长度k,判断\( ...
随机推荐
- 《Linux设备驱动程序》第三版 scull编译 Ubuntu18.04
0 准备工作. 0.0 系统环境:Ubuntu18.04.1 amd64. 0.1 安装必要软件包 1 sudo apt install build-essential bison flex libs ...
- Understanding glibc malloc
https://wooyun.js.org/drops/深入理解%20glibc%20malloc.html https://sploitfun.wordpress.com/2015/02/10/un ...
- TreeFrog Framework : High-speed C++ MVC Framework for Web Application http://www.treefrogframework.org
TreeFrog Framework : High-speed C++ MVC Framework for Web Application http://www.treefrogframework.o ...
- PostgreSQL 登录时在命令行中输入密码
有时候需要设置定时任务直接执行 sql 语句,但是 postgresql 默认需要人工输入密码,以下命令可以直接在命令行中直接填入密码 PGPASSWORD=pass1234 psql -U MyUs ...
- [转][linux][centos]嵌入式 Linux下编译并使用curl静态库
#x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...
- 0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实例
gateway就是用来替换zuul的,功能都差不多,我们看下它怎么来跟nacos一起玩.老套路,三板斧: 1.pom: <?xml version="1.0" encodin ...
- Unity3d基于Socket通讯例子(转)
按语:按照下文,服务端利用网络测试工具,把下面客户端代码放到U3D中摄像机上,运行结果正确. http://www.manew.com/thread-102109-1-1.html 在一个网站上看到有 ...
- 【esp8266】技术汇总帖
https://blog.csdn.net/xh870189248/article/details/80027961 这哥们 牛
- Android Butterknife使用方法总结 IOC框架
前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...
- 随机采样一致算法RANSAC
A project to learn line, circle and ellipse detection in 2d images: https://github.com/Yiphy/Ransac- ...