Power Strings poj-2406

    题目大意:询问一个字符串最多几个相同且连续的字符串构成(Eg:abababab由4个构成,abcd由1个构成)。

    注释:字符串长度为n,$1\le n\le 10^6$.

      想法:hash裸题,通过Hash求出单个字符串的hash前缀,然后用n的约数以及hash值判定即可。

    最后,附上丑陋的代码... ...

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. char s[1001000];
  8. int mod=10009;
  9. int len,k=131;
  10. ll now;
  11. ll hash[1001000];
  12. ll cal(int x,ll y)
  13. {
  14. ll re=1;
  15. while(x)
  16. {
  17. if(x&1) re=(re*y)%mod;
  18. x>>=1;y=(y*y)%mod;
  19. }
  20. return re;
  21. }
  22. bool check(int x)
  23. {
  24. ll cc=cal(x,(ll)k);
  25. for(int i=(x<<1);i<=len;i+=x)
  26. {
  27. if((hash[i]-(hash[i-x]*cc)%mod+mod)%mod!=hash[x])
  28. {
  29. return false;
  30. }
  31. }
  32. return true;
  33. }
  34. int main()
  35. {
  36. while(1)
  37. {
  38. scanf("%s",s+1);
  39. len=strlen(s+1);
  40. if(len==1 && s[1]=='.')
  41. {
  42. return 0;
  43. }
  44. for(int i=1;i<=len;i++)
  45. {
  46. hash[i]=(hash[i-1]*k+s[i])%mod;
  47. }
  48. for(int i=1;i<=len;i++)
  49. {
  50. if(len%i==0 && check(i))
  51. {
  52. printf("%d\n",len/i);
  53. break;
  54. }
  55. }
  56. }
  57. }

    小结:hash是处理字符串较强劲的办法,原因在于可以将字符串切换成数字,方便进行一些处理,二是重复的概率可以自己通过mod调整。

[poj2406]Power Strings_hash的更多相关文章

  1. poj2406 Power Strings(kmp)

    poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...

  2. POJ2406 Power Strings —— KMP or 后缀数组 最小循环节

    题目链接:https://vjudge.net/problem/POJ-2406 Power Strings Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  3. POJ2406 Power Strings KMP算法

    给你一个串s,如果能找到一个子串a,连接n次变成它,就把这个串称为power string,即a^n=s,求最大的n. 用KMP来想,如果存在的话,那么我每次f[i]的时候退的步数应该是一样多的  譬 ...

  4. poj2406 Power Strings(kmp失配函数)

    Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 39291 Accepted: 16315 Descr ...

  5. 【kmp算法】poj2406 Power Strings

    如果next[n]<n/2,一定无解. 否则,必须要满足n mod (n-next[n]) = 0 才行,此时,由于next数组的性质,0~n-next[n]-1的部分一定是最小循环节. [ab ...

  6. poj2406 Power Strings (kmp 求最小循环字串)

    Power Strings   Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 ...

  7. [poj2406] Power Strings

    Description 对于两个字符串a,b,定义a×b为将b接到a的末尾组成新的字符串.对于一个字符串a的幂运算的定义与我们在数学中的定义一样:a0=''(空字符),an+1=an×a. Input ...

  8. POJ2406 Power Strings(KMP,后缀数组)

    这题可以用后缀数组,KMP方法做 后缀数组做法开始想不出来,看的题解,方法是枚举串长len的约数k,看lcp(suffix(0), suffix(k))的长度是否为n- k ,若为真则len / k即 ...

  9. poj2406 Power Strings 【KMP】

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...

随机推荐

  1. Flex中的FusionCharts 2D折线图

    Flex中的FusionCharts 2D折线图 1.设计源码 LineChart.mxml: <?xml version="1.0" encoding="utf- ...

  2. Caused by: java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be ope

    1.错误描述 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.tes ...

  3. Linux以字节显示内存大小

    Linux以字节显示内存大小 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -b total used free shared buffers ca ...

  4. 错误卸载软件导致Windows7系统中的软件无法播放视频

    1.错误描述 2.错误原因 在卸载软件时,不小心将Windows7中的服务给删除了 3.解决办法 重新安装操作系统

  5. OpenStack_I版 1.准备过程

    openstack是一个开源云平台,python开发   此次部署为实验环境, 采用扁平化简单的网络架构部署                       优点:低耦合的,模块化            ...

  6. CF368 D - Persistent Bookcase

    re了20多发 还是我在测试数据上操作最后了10多发才发现的 其实只需要多加一句就好了 真的愚蠢啊,要不都能进前100了 #include<bits/stdc++.h> using nam ...

  7. Centos运行Mysql因为内存不足进程被杀

    今天刚刚申请了一个新的域名,在申请完域名刚准备绑定给小伙伴分享注册新域名的喜悦时,刚把网站发到我们小伙伴们的讨论群里,却发现访问不了了,提示,数据库连接失败! 真的时一个尴尬.....    所有人都 ...

  8. httpclient案例一(调用识别接口)

    public Map<String, Object> pictureRecognition(String recotype, MultipartFile imageFile) { Stri ...

  9. Java双等号,Equals(),HashCode()小结

    默认情况 - 双等号==,比较的是内存地址. - equals(),默认比较的是内存地址. - hashCode(),默认返回的是object的内存地址. String中方法改写的情况 经常会遇到需要 ...

  10. Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)

    一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...