poj-2046-循环子串问题

DS--字串循环问题 题目描述 给定一个字符串,求需要添加至少几个字符到字符串末尾才能使得整个字符串串由某一个不为本身的子串循环构成? 如"abca",添加"bc"后构成"abcabc",其由子串"abc"循环构成;也可以添加"abca"后构成"abcaabca",其由子串"abca"循环构成,相比之下"bc"只有2个字符,添加的字符量最少。 输入 第一行包括一个整数T(1 <= T <= 100),代表测试组数 每组测试数据包括一行字符串,其长度范围为 [3, 104] 输出 对于每组测试数据 输出一个整 阅读详情

问题

题目:[poj-2046]

思路

这个题目有个结论:
若s存在循环子串,当且仅当,len可以被len - prefix[len-1]整除。连接次数为len / len-prefix[len-1].
充分性我不会证明,我就证明下必要性吧。
不放假设s = pattern * n; len = strlen(s);
显然prefix[ len - 1 ] = pattern*(n-1),这个是最长的公共前缀后缀长度。
那么,循环节的长度为len - prefix[len - 1],也就是len(pattern)。
所以,此时len可以整除len - prefix[len-1].cycle = len - prefix[len-1].

代码

#include <stdio.h>
#include <string.h>
#define LEN 1000000 + 10

char str[LEN];
int prefix[LEN];

void set_prefix( int n );

int main( void ){
    while( scanf( "%s", str ), strcmp(str, ".") ){
        int ans = 0;
        int n = strlen(str);
        set_prefix(n);

        int cycle = n - prefix[n-1];
        if( n % cycle == 0 ) ans = n/cycle;
        else ans = 1;

        printf( "%d\n", ans );
    }

    return 0;
}
void set_prefix( int n ){
    prefix[0] = 0;
    for( int i = 1; i < n; ++i ){
        int k = prefix[i-1];
        while( k > 0 && str[i] != str[k] ){
            k = prefix[k-1];
        }
        if( str[i] == str[k] )
            prefix[i] = k + 1;
        else
            prefix[i] = 0;
    }
}
告别切换烦恼!用Parallels Desktop的Host-Only网卡,在macOS上直接访问虚拟机里的公司内网 本文详细介绍了如何在macOS上使用Parallels Desktop的Host-Only网卡直接访问虚拟机内的公司内网,告别频繁切换操作系统的烦恼。通过配置Host-Only网络模式,实现主机与虚拟机的安全高效通信,特别适合需要频繁访问内网资源的IT从业者。文章包含分步指南、自动化脚本和常见问题解决方案,帮助用户优化工作流程。 阅读详情

相关推荐

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3685

子串循环问题 (Ver. I)

KMP的子串循环定理

笔记 834

高通Camera AWB跳变问题实战:从夕阳场景到参数调优的完整避坑指南

本文深入解析高通Camera AWB跳变问题,特别是在夕阳场景下的色温突变现象。通过分析灰区统计失效、光源混合干扰等成因,提供从参数调优到诊断工具链的完整解决方案,包括动态灰区扩展算法、色温平滑过渡方案及高通平台特定优化技巧,帮助工程师有效解决AWB跳变问题。

sre5engineer的博客 858

2021-08-10 字符串:子串问题——关于循环,递归,迭代,动归,记忆化,背包,减枝...

2021-08-09 字符串:子串拆分实现Trie单词拆分单词拆分Ⅱ 实现Trie 什么是trie?Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 代码实现: class Trie: def __init__(self): self.children = [None] * 26 self.isEnd = False def insert(self, word: str) -> None: nownode =

Can__er的博客 304

Delft3D从入门到实践:安装、编译与首次模拟指南

本文为Delft3D初学者提供了一份详尽的从零开始指南。内容涵盖软件获取、许可证申请、图形界面安装、核心计算内核的编译环境搭建与编译步骤,以及最终整合运行首个水动力模拟的全流程。重点解决了Windows系统下Delft3D安装与编译的常见问题,帮助用户快速上手这一开源水动力与泥沙输运模拟工具。

weixin_29303701的博客 541

基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南:从硬件设计到软件配置

本文提供了一份详细的基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南。内容涵盖从核心硬件选型(如ESP32-S3主控与PCM5102 DAC芯片)、四路独立LDO供电设计,到软件环境配置、固件烧录及常见问题调试的全过程,旨在帮助创客打造一台支持网络电台、本地播放与蓝牙连接的高保真音频播放器。

weixin_30632267的博客 187

[Daimayuan]循环子串(C++,字符串)

一道字符串问题 只需要证明最大的循环子串是符合条件的 在复制拼接后的字符串中寻找即可

m0_74036684的博客 515

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6567

poj 2046Power Strings

View Code 1 #include<stdio.h> 2 #include<string.h> 3 char str[1000010]; 4 int next[1000010]; 5 int get_next(int x) 6 { 7 int i=0,j=-1; 8 next[0]=-1; 9 whil...

weixin_30433075的博客 118

Windows 11 RDP Wrapper 配置教程与常见问题解决方法

解锁家庭版RDP主机功能(Windows 11家庭版原生不支持作为RDP服务器)突破单用户连接限制,实现多用户同时远程登录(类似服务器版功能)它不修改系统核心文件,通过注入方式工作,相对安全可靠。RDP Wrapper是Windows 11家庭版用户启用远程桌面、突破单用户限制的高效工具。遵循本文步骤可快速完成配置,遇到问题时按常见问题排查方案逐一解决,多数问题可通过更新配置文件或重启服务解决。若长期使用,建议关注官方GitHub仓库的更新,确保兼容性和安全性。

weixin_41521681的博客 1370

手把手教你用SNAP做全极化SAR图像分类

引言 最近在研究极化SAR图像分类方面的内容,发现用SNAP软件可以很方便的实现图像的分类。因为在入门过程中踩了很多坑,浪费了一些时间,为了不让大家踩坑,所以决定写下这篇教程。 前期准备 软件下载 SNAP是欧空局旗下的一个SAR图像处理软件,可以点击下载地址进行下载。 数据下载 数据下载地址:https://mdacorporation.com/sample_data/RS2_OK76385_...

zz651044657的博客 1万+

POJ 2046 Power Strings

Power Strings Time Limit: 3000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u [Submit]   [Go Back]   [Status]   Description Given two strings a and b we

码代码的猿猿 1486

【3天快速入门WPF】从小白到新手入门教程

嘿,小伙伴们!如果你已经有一定的C#开发基础,但想快速掌握WPF开发,达到企业级水准,那接下来的这个三天快速入门计划绝对适合你!虽然听起来有点挑战,但别担心,只要跟着这个高强度、结构化的学习计划,你一定能搞定它。首先,我们得搞清楚,WPF的核心知识点到底有哪些。要想达到企业级开发水准,XAML、数据绑定、MVVM、控件使用、命令系统、样式模板这些统统都得拿下。听起来是不是有点多?别急,我们把任务分解到三天里,每天安排合理的内容,保证理论和实践相结合,让你学得扎实又高效。

Zy100Papa的博客 1423

poj 2046&&poj1961KMP 前缀数组

Power Strings Time Limit: 3000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description Given two strings a and b ...

weixin_30564901的博客 93

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

KMP算法及应用&(hdu2087剪花布条 )&Power Strings (POJ2046)&Cyclic Nacklace(HDU3746)

KMP由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人设计的线性时间字符串匹配算法。所以叫做KMP。。。。。

losteracmer的博客 416

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

4种解法 - 不同的循环子字符串

4种解法实现,子字符串可以写成某个字符串与其自身的串联。。。

具身小站 1731

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【id:56】【20分】C. 子串循环问题 (Ver. I)

题目描述给定一个字符串,求需要添加至少几个字符到字符串末尾才能使得整个字符串串由某一个不为本身的子串循环构成?如"abca",添加"bc"后构成"abcabc",其由子串"abc"循环构成;也可以添加"abca"后构成"abcaabca",其由子串"abca"循环构成,相比之下"bc"只有2个字符,添加的字符量最少。输入第一行包括一个整数T(1

White--Night的博客 1156

循环子串

#include<bits/stdc++.h> using namespace std; #define ll long long const ll N = 100000001; // ll Next[N]; unordered_map<ll, ll> Next; string str; void getnext(){ ll i, j; i = 0; j = -1; Next[0] = -1; while(i < str.size()).

qq_24624539的博客 576

字符串的最大子串问题

基于字符串的最大子串问题是经常面试的问题,想要表现的好不但要会基础的方法,同时还要学会优化的算法。 常考的有两个问题: 1:两个字符串的最大公共子串(还可能是子序列) 2:同一个字符串中相同的最大子串问题 例如输入qweabcuwabcfw,输出结果为:重复字符串的长度3和位置4 一:求两个字符串的最大公共子串 #include&lt;iostream&gt; #...

runner668的博客 1万+

E : 子串循环问题 (Ver. I)

E : 子串循环问题 (Ver. I) Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 18 Solved: 12 Description 给定一个字符串,求需要添加至少几个字符到字符串末尾才能使得整个字符串由某一个不为本身的子串循环构成? 如“abca”,添加“bc”后构成“abcabc”,其由子串“abc”循环构成;也可以添加“abca”后构成“abcaabca”,其由子串“abca”循环构成,相比之下“bc”只有2.

风吹落叶的博客 1255

kmp之最小循环子串

今天研究了一下杭电 1358题,感觉最小循环子串的问题的重点是理解为什么 len%(len-next[i])==0 可以得出最小循环子串。 next[i]是kmp初始化的一个数组。 从我画的这个图中 可以看出,因为len%(len-next[i])==0 我们可以把len-next[i]

封印大枪的专栏 2396

最小循环子串

定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。 (1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。 (2)如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(len-L)%L=L-next[le...

Oops的博客 6910

sincerit Rabbit的字符串(注意循环串)

链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法。 魔法可以选择字符串的任一位置,并将该位置后面的所有字符水平拼接到串首。 例如:对于字符串abcde,可以通过施加魔法得到cdeab。 如果xxx通过施加魔法将字符串的字典序变得严格比之前的小,那么他将拿走这一...

sincerit的博客 311

字符串 --- 循环移位问题

字符串循环移位问题是面试中比较容易遇到的,就是输入一个字符串和一个整数,原地输出移位后的字符串。 不同的考官可能对程序的具体要求不同,这里要求空间复杂度为O(1)。 这里给出两种解答方法。 (1)将移动n位看做“每次移动一位,共操作n次”,这是一种化整为零的思维方法。只要能想到这一步,相信下面的代码就不难写出了: 1 void shift_1(char* str)

Experience set us apart! 1089
上一篇: leetcode-125-Valid Palindrome
下一篇: jobdu-1447-最短路
Kang_TJU
博客等级 码龄10年 63粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值