uva 周期串(求模分组)

/*
本题题意求出周期串的最短长度
:eg : hohoho 那么此周期串的长度可以为2 (ho) 同时也可以为 6(hohoho)
  最短长度当然就是2
本题思路:
    求出周期串, 必然存在一个周期, 设定一个循环, i代表周期的长度,
从1递增,最长的长度为字符串的长度 s.size(), 通过周期 将 字符串分组
分组的字符串长度必须为整数, 因此只用考虑整数长度的字符串, 如果存
在字符串所有分组都与第一组的字符相同, 那么此时就满足题意要求,输出
对应的的周期长度 也就是最短的周期串长度,

本题需要注意的是 : 本题输出条件是 输出两个字符串之间需要有两个换行符,
最后一个字符串只有一个换行符
    
*/

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    string s;
    while(n--) {
        cin >> s;
        int i = 1;
        for(;i <= s.size(); i++) { // 设定字符串的周期
            bool isfind = true; // 判断是否找到了最短周期串
            if(s.size() % i == 0) { // 表示能够分组
                for(int j = i; j < s.size(); j++) {
                    // 判断此时的字符是否与第一组字符串中的字符相同
                    if(s[j] != s[j % i]) { // 如果不同
                        isfind = false;
                        break;
                    }
                }
            if(!isfind)
                continue;
            break;
            }
        }
        printf("%d\n%s", i,n == 0 ?  "":"\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/csyxdh/p/12028461.html

时间: 2024-11-05 22:39:54

uva 周期串(求模分组)的相关文章

UVa 455 Periodic Strings (周期串)

Periodic Strings Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Periodic Strings  A character string is said to have period k if it can be formed by concatenating one or more repetitions of anothe

E - Power Strings,求最小周期串

E - Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2406 Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = &

UVA - 455(周期串)

求一段长度为k的字符串的最小重复周期(k<=80),代码: 思路: 周期串长度n必然能被k整除,在这一条件下,对周期小于k/2的,进行验证,验证k/n-1次,取最先成功的重复周期长度或k为最终结果 小技巧: 如果题目要求"两结果之间"有换行,那么对于最后一个case,可利用以下代码高亮处的方式来处理,使代码更简洁美观巧妙. #include"iostream" #include"cctype" #include"cstring&q

uva 1328 - Period (周期串的判断 kmp)

题意:给一个长为n的字符串,问字符串的前缀是不是周期串,如果是周期串,输出前缀的最后一个字母的位置和最短周期 思路:kmp字符串匹配的性质运用. 对于前i个字符,如果f[i]不等于零,说明在此字符串的前缀中,有一部分[0,f[i]]和本字符串[i-f[i],i]的这一部分是相同的.如果这i个字符组成一个周期串,那么错开的一部分[f[i],i]恰好是一个循环节.(换句话说,如果满足f[i]不等于零 && [f[i],i]是循环节这两点,就可以说明前i个字符组成一个周期串) code: #in

HDU 1358 (所有前缀中的周期串) Period

题意: 给出一个字符串,在所有长度大于1的前缀中,求所有的周期至少为2的周期串,并输出一个周期的长度以及周期的次数. 分析: 有了上一题 HDU 3746 的铺垫,这道题就很容易解决了 把next求出来,然后逐个判断即可. 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1000000 + 10; 5 char p[maxn]; 6 int n, next[maxn]; 7 8 void get_next(

【周期串】NYOJ-1121 周期串

[题目链接:NYOJ-1121] 例如:abcabcabc 该字符串的长度为9,那么周期串的长度len只可能为{1,3,9},否则就不可能构成周期串. 接下来,就是要在各周期间进行比较.描述不清...自己走一遍就懂了. 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int MAXN = 202; 5 char s[MAXN]; 6 int main(){ 7 while((cin &g

nyoj 次方求模

次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100) 每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000) 输出 输出a的b次方对c取余之后的结果 样例输入 3 2 3 5 3 100 10 11 12345 12345 样例输出 3 1 10481 #include<cstdio> #include<cstdlib

杭电ACM 二 数学求模

Font Size: ← → Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple test cases. Ea

sql 求模 实现 贪婪算法

背景: 最近在维护一个项目, 因新功能需求拓展.  有一个字段存储 一个星期中的几天,可能是全部,也有可能只是其中的星期一, 星期三,等. 因为项目中有一个枚举值, 已作好初始化赋值工作, 而且 客户端开发时直接把组合值合并成一个早已存入这个字段到DB. 我在项目别的地方(动态批量生成月报表时,又需要得到这个具体的频率值. 因为每个月有几个星期一,星期三,不是固定的, 需要动态计算.),  所以, 又需要将其还原为 其中具体对应的 星期一,星期三 等. 这里就需要对这个组合值,进行求模操作. 于