UVa 455 周期串 (Periodic Strings)

2024-04-06 00:18
文章标签 周期 strings uva 455 periodic

本文主要是介绍UVa 455 周期串 (Periodic Strings),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目意思:

            如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意6,12也为周期 ),求的是最小周期。


实现:

#include<stdio.h>
#include<string.h>
#define maxn 100000
int main(){char s[maxn];int n, i;int ok;
//		freopen("C:\\Users\\zhangwei\\Desktop\\input.txt","r",stdin);
//		freopen("C:\\Users\\zhangwei\\Desktop\\output.txt","w",stdout);scanf("%d",&n);while(n--){getchar();//这个最好加上 防止换行符 不过没加的时候也AC了scanf("%s",&s);int len = strlen(s);for(i = 1; i <= len; i++ ){//i表示周期 要可以取到 len(注意)ok = 1; //循环开始 置为1if(len % i == 0){//首先要满足 周期能被 字符串长度整除 不然失去意义了for(int j = 0; j < len; j++ ){//这里是扫描字符(不可以取到len 因为数组越界)if(s[j] != s[j%i]){// 核心ok = 0;break;}} if(ok)//目的找到最小的周期 就退出循环break;}}if(ok){//题目要求Outpu 空一个空行printf("%d\n",i);	if(n)//最后一个 不能 有空行printf("\n");}}	return 0;}

这篇关于UVa 455 周期串 (Periodic Strings)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878530

相关文章

android的strings整理脚本

统一对String整理的工具,结构如下 代码 package com.owant.toollib;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import java.util

UVA - 12206 Stammering Aliens (hash)

这题其实很容易想到2分长度,关键是2分后,怎么判断出现最多次的串是否》=m次了。这里需要用到hash来处理。 对于一个字符串   H[i] =H[i+1]*131+s[i]  ;其中 H[n]=0;那么对于一个长度为L的串 ,hanh[i,l]=H[i]-H[i+L]*x^L ; 这样记录每个字符串的hash值,然后再处理起来就比较简单了。 VIEW CODE #include<

[leetcode] 43. Multiply Strings(大数相乘)

Multiply Strings 描述 Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2. Note: 1. The length of both num1 and num2 is < 110. 2. Both num1 an

[Uva 11990] Dynamic Inversion (CDQ分治入门)

Uva - 11990 动态逆序对,求删除一个点之前序列中逆序对的个数 首先倒过来看这个问题,把点先全部删掉 然后从最后一个点开始倒着往数列中加点 求加完这个点逆序对的变化 CDQ分治做法 把删除时间看作 t,下标看作 x,值看作 y 然后对 x排序,对 t偏序,用树状数组维护 y 具体来说就是对于每个点 (t0,x0,y0) (t_0, x_0, y_0) 先统计

代码随想录算法训练营第29天(贪心)|455.分发饼干、376. 摆动序列、53. 最大子序和

455.分发饼干 题目链接:455.分发饼干 文档讲解:代码随想录 状态:so easy 思路:对胃口和饼干大小排序,小胃口对应小饼干,不满足的话用下一块饼干试探。 题解: public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0;int i

UVA 11624 搜索

给出1000*1000矩阵,含起点‘J’,路‘.',墙‘#’,火‘F'; 火每秒蔓延一格,人每秒走一步 问人是否可以安全走出矩阵,不能被火碰到 先对所有火BFS一遍,记录每个点被烧到的时间 然后对人BFS一遍,若到每点前没被火烧即可走 #include "stdio.h"#include "string.h"#include "queue"using namespace

四种信号在时域和频域之间的对应关系(连续周期/非周期、离散周期/非周期)(拉普拉斯、Z变换)

1. 连续周期时间信号 时域:连续周期时间信号可以理解为一种在时间上重复的波形,比如正弦波或余弦波。频域:在频域中,这种信号可以分解为一系列不同频率的正弦波的叠加。每个正弦波对应一个频率和一个复数系数 (C_n),这些系数告诉我们各个频率成分的强度和相位。 公式解释: x ~ ( t ) = ∑ n = − ∞ ∞ C n ⋅ e j n ω 0 t \tilde{x}(t) = \

UVa 11361 Investigating Div-Sum Property

这道题居然提交了十次才过....期间小问题不断。思路的话基本是《训练指南》里面来的,不过有几个小问题需要注意一下。第一,当K在大于100的情况下,就直接输出0就可以了。因为a,b不超过2^31,可以估算出a,b最多十位十进制数,那么每位最大为9,所以各个数字之和是不可能超过100的,那么个数字之和为模K为0的条件是永远不可能到达的。       还有一点是,当剩余数字d=0时,当且

UVa 1362(LA 3516) Exploring Pyramids

依旧是《训练指南》上的一道例题。思路大致相同,即设有一个序列S(i),S(i+1),S(i+2)...S(j),d[i,j]为所求的解。当S(i)==S(k),i<k<=j 时,说明在k回到根,那么S(i+1)...S(k-1)构成一棵独立的子树(当然也可能并不是子树)。那么d[i,j]就要加上d[i+1,k-1]*d[k,j],不断递增k,每遇到一个k,d[i,j]+=d[i

UVa 11174 Stand in a Line

依旧是《训练指南》上的一道例题。书上讲的比较抽象,下面就把解法具体一下。因为涉及到父子关系,因此自然而然可以将n个节点构造成一棵树,最后将形成一个森林。接下来将使用递归的手法。设f(i)是以节点i为树根的子树,节点i有儿子c1,c2,c3....cj共j棵子树。s[i]为树根为i的子树包含的节点数。如果分别先给各个子树内部排序,那么毫无疑问, 共有f(c1)*f(c2)*f(c3).