• 循环节


    循环节

    题目描述

    第一节是英语课。今天,老师又教了桐桐很多单词。桐桐发现所有单词都有循环节(大写字母一律化成小写字母)。如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,字符串中不一定只出现小写字母。

    分析:把字符串的第一个字符出现的位置存一下,然后暴力枚举即可,卡过去了,开心(数据水?);

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include <bitset>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define vi vector<int>
    #define pii pair<int,int>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e6+10;
    const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    int n,m,len1,len,coco[maxn],all;
    char a[maxn],b[maxn];
    bool check(int now)
    {
     
        for(int i=len1;i<now;i++)b[i]=a[i];
        len1=now;
        b[now]=0;//printf("%d %s
    ",now,b);
        while(strstr(a+now,b)-(a+now)==0)
            now+=len1;
        int j=0;
        for(int i=now;i<len;i++)
            if(b[j++]!=a[i])return false;
        return true;
    }
    int main()
    {
        int i,j,k,t;
        while(~scanf("%s",a))
        {
            len=strlen(a);
            all=0;len1=0;
            rep(i,0,len-1){if(a[i]>='A'&&a[i]<='Z')a[i]=a[i]-'A'+'a';if(a[i]==a[0]&&i!=0)coco[all++]=i;}
            rep(i,0,all-1)
            {
                if(check(coco[i]))
                {
                    printf("%d
    %s
    ",len1,b);
                    break;
                }
            }
            if(i==all)printf("%d
    %s
    ",len,a);
        }
        //system ("pause");
        return 0;
    }
  • 相关阅读:
    smartFoxClinet客户端官方中文Doc
    testTrycatch和catch中的应用程序恢复
    这几天做仿豆丁网flash文档阅读器,百度文库阅读器经验总结
    怎么通过生成动态对象名来调用一个对象?
    AS3的Number类型变量不指定初始值,则其初始值为NaN,而不是0.0
    最适合女生的五大紧缺游戏开发职位
    [阻塞和非阻塞]
    网络游戏客户端的日志输出
    我心目中的MMO
    和某游戏猎头的对话
  • 原文地址:https://www.cnblogs.com/dyzll/p/5743073.html
Copyright © 2020-2023  润新知