循环节

时间限制: 1 Sec  内存限制: 64 MB
提交: 56  解决: 16
[提交][状态][讨论版]

题目描述

第一节是英语课。今天,老师又教了桐桐很多单词。桐桐发现所有单词都有循环节(大写字母一律化成小写字母)。如a(循环长度为1,循环节为
a),luLul(循环长度为2,循环节为lu),OlyMPic(循环长度为7,循环节为olympic),CcCcccc(循环长度为1,循环节为
c),等等。
而且,桐桐发现这能加速她背单词。她上课和ROBIN说了话,老师罚她背单词。虽然就一个,但长度实在太大,单词大小写可以不管,求桐桐需要记多长的最小循环节,并把这个单词的最小循环节输出来(最后一个循环节可以没完)。

输入

1行,是一个单词,其中不一定只出现小写字母,并且长度小于101000。

输出

2行,第1行输出循环长度,第2行输出循环节(全部输出小写字母)。

样例输入

erEreR
OlyMpic

样例输出

2
er
7
olympic

提示

30%的数据满足:字符串长度≤255,字符串中均为小写字母;

50%的数据满足:字符串长度≤255,字符串中不一定只出现小写字母;

70%的数据满足:字符串长度≤10000,字符串中不一定只出现小写字母:

100%的数据满足:字符串长度≤101000,字符串中不一定只出现小写字母

【分析】考虑到循环节一定是以第一个字符开头的,那我们把所有str[0]出现的位置记录s[]下来,然后将0--(s[i]-1)的子字符串放入队列搜索,率先搜到的一定是字典序最小的。

如果一直搜不到,那就是他本身咯。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
const int N=;
double m=1e7;
int s[N];
bool tt;
string str;
int n;
struct man {
string str;
int num;
};
bool check(string a,string b) { for(int i=; i<a.size(); i++) {
if(b[i]!=a[i])return false;
}
return true;
}
queue<man>q;
void bfs() {
while(!q.empty()) {
man t=q.front();
q.pop();
int nn=t.str.size();
string ss=str.substr(t.num,nn);
if(nn+t.num>n) {
if(check(ss,t.str)) {
tt=true;
printf("%d\n",nn);
cout<<t.str<<endl;return;
}
}
else {
if(ss==t.str){man k=t;k.num+=nn;q.push(k);}
}
}
}
int main() {
while(cin>>str) {
memset(s,,sizeof(s));
int cnt=;tt=false;
n=str.size();
bool flag=false;
for(int i=; i<str.size(); i++) {
if(str[i]<)str[i]+=;
if(str[i]==str[])s[cnt++]=i;
if(str[i]!=str[])flag=true;
}
if(!flag) {
cout<<""<<endl<<str[]<<endl;
}
else {
for(int i=; i<cnt; i++) {
string g=str.substr(,s[i]);
man G;
G.num=s[i];
G.str=g;
q.push(G);
bfs();
if(tt)break;
}
}
if(!tt)cout<<n<<endl<<str<<endl;
}
return ;
}

循环节(BFS)的更多相关文章

  1. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

  2. hdu 2837 Calculation 指数循环节套路题

    Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. HDU 3746 (KMP求最小循环节) Cyclic Nacklace

    题意: 给出一个字符串,要求在后面添加最少的字符是的新串是循环的,且至少有两个循环节.输出最少需要添加字符的个数. 分析: 假设所给字符串为p[0...l-1],其长度为l 有这样一个结论: 这个串的 ...

  4. Period(KMP,循环节问题)

    题意: 求给你个串,前i位子串由某个字符串重复k次得到,求所有的i和k 分析: i-next[i]恰好是一个循环节 #include <map> #include <set> ...

  5. uva202:循环小数(循环节+抽屉原理)

    题意: 给出两个数n,m,0<=n,m<=3000,输出n/m的循环小数表示以及循环节长度. 思路: 设立一个r[]数组记录循环小数,u[]记录每次的count,用于标记,小数计算可用 r ...

  6. poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】

    Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 14653   Accepted: 6965 Descripti ...

  7. [KMP求最小循环节][HDU3746][Cyclic Nacklace]

    题意 给你个字符串,问在字符串末尾还要添加几个字符,使得字符串循环2次以上. 解法 无论这个串是不是循环串 i-next[i] 都能求出它的最小循环节 代码: /* 思路:kmp+字符串的最小循环节问 ...

  8. [KMP求最小循环节][HDU1358][Period]

    题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...

  9. leetcode:Reverse Nodes in k-Group(以k为循环节反转链表)【面试算法题】

    题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...

  10. HDU3977(斐波那契数列模n的循环节长度)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3977 题意:求斐波那契数列模p的循环节长度,注意p最大是2*10^9,但是它的素因子小于10^6. 分析过 ...

随机推荐

  1. 【BZOJ 3643】Phi的反函数 数搜索

    这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...

  2. 如何用JavaScript做一个可拖动的div层

    可拖动的层在Web设计中用处很多,比如在某些需要自定义风格布局的应用中,控件就需要拖动操作,下面介绍一个,希望可以满足你的需求,顺便学习一下可拖动的层是如何实现的. 下面是效果演示: 这个DIV可以移 ...

  3. 如何优化JQuery each()函数的性能

    如果对jQuery这东西只停留在用的层面,而不知其具体实现的话,真的很容易用出问题来.这也是为什么近期我一直不怎么推崇用jQuery,这框架的API设定就有误导人们走上歧途之嫌. 01 $.fn.be ...

  4. CSS样式权重的级联cascade的概念

    我们知道,firefox在众多浏览器中是对css 2高度兼容的一款浏览器,那是我能够编写一个中型b2b网站的时候(并不能说是我遇到过的难题)在禅意花园中看到的一个案例,说的是某个菜单在css中定义了以 ...

  5. 运动目标前景检测之ViBe源代码分析

    一方面为了学习,一方面按照老师和项目的要求接触到了前景提取的相关知识,具体的方法有很多,帧差.背景减除(GMM.CodeBook. SOBS. SACON. VIBE. W4.多帧平均……).光流(稀 ...

  6. jquery的ajax实现方式

    在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 首先我们看$.get(): .代码如下: $.get("test.jsp", { ...

  7. Java Web转发和重定向问题

    0x01:转发情况.转发过程中,只请求一次,request对象设置了之后会一直存在,直到下一次请求. 0x02:重定向情况.会发生两次请求,如果设置了request对象,那么重定向之后,request ...

  8. c++ 批量初始化数组 fill和fill_n函数的应用

    转自c++ 如何批量初始化数组 fill和fill_n函数的应用 std::fill(a+,a+,0x3f3f3f3f);///从下标2到下标10 前闭后开 共8个 std::fill_n(a+,,0 ...

  9. HDOJ 3501 Calculation 2

    题目链接 分析: 要求的是小于$n$的和$n$不互质的数字之和...那么我们先求出和$n$互质的数字之和,然后减一减就好了... $\sum _{i=1}^{n} i[gcd(i,n)==1]=\le ...

  10. The service base of EF I am using

    using CapMon.Data; using System; using System.Collections.Generic; using System.Linq; using System.T ...