zoukankan      html  css  js  c++  java
  • Power Strings POJ

    题目链接:POJ - 2406 

    题目描述

    定义两个字符串s1和s2的乘积s1*s2为将s1和s2连结起来得到的字符串。 
    例如:s1="xy",s2="z",那么s1*s2="xyz"。 
    由此可以定义s1的幂次:s1^0="",s1^n=s1*s1^(n-1),n>0。

    输入

    输入包含多组测试数据。 
    每组数据由一行构成,包含一个字符串s。 
    输入数据以"."结束。

    输出

    对于每组输入数据输出一行,找出最大的正整数n,使得存在某个字符串a,s = a^n.

    样例输入

    abcd
    aaaa
    ababab
    .
    

    样例输出

    1
    4
    3
    题解:字符串hash,然后枚举子串长度,。模板套一下就可以
    //#include<bits/stdc++.h>
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #define pb push_back
    #define ll long long
    #define ull unsigned long long
    #define rank wepsdas
    #define PI 3.14159265
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define eps 1e-7
    using namespace std;
    const int base=23;
    const int N=1e6+100;
    const int mod=1e9+7;
    struct hash
    {
        char s[N];
        ull h[N],qp[N];
        ll p[N],len,val[N];
        void init()
        {
            h[0]=val[0]=0;
            qp[0]=p[0]=1;
            len=strlen(s+1);
            for(int i=1;i<=len;i++)
            {
                qp[i]=qp[i-1]*base;
                h[i]=h[i-1]*base+s[i];
            }
        }
        ull get_hash(int l,int r)
        {
            return h[r]-h[l-1]*qp[r-l+1];
        }
    }ac;
    bool judge(int l)
    {
        ull tmp=ac.get_hash(1,l);
        for(int i=l+1;i<=ac.len;i+=l)
        {
            if(tmp!=ac.get_hash(i,i+l-1))return false;
        }
        return true;
    }
    int main() {
    
        while(scanf("%s",ac.s+1))
        {
           ac.init();
           if(ac.len==1&&ac.s[1]=='.')break;
          // printf("%s",ac.s+1);
       //ŝ    for(int i=)
           int ans=-1;
           for(int i=1;i<=ac.len;i++)
           {
                if(ac.len%i==0)
                {
                    if(judge(i))
                    {
                       ans=i;break;
                    }
    
                }
           }
           printf("%d
    ",ac.len/ans);
        }
        return 0;
    }
     
  • 相关阅读:
    TP5之自定义分页样式
    使用ajax方法实现form表单的提交
    H5页面唤起手机拨打电话(拨号)
    php开启openssl扩展
    tp5 加载 extend 类库的方法 (有命名空间和没有命名空间的调用)【转】
    PHP 返回13位时间戳
    thinkphp5 view_path 配置,进行模板分离
    html2canvas 截图不完整 图片缺失问题
    PHP把JSON转换成数组
    tp5怎么隐藏默认模块名啊
  • 原文地址:https://www.cnblogs.com/lhclqslove/p/10322531.html
Copyright © 2011-2022 走看看