设为首页 加入收藏

TOP

POJ 2774 哈希+二分长度
2015-07-20 17:37:38 来源: 作者: 【 】 浏览:3
Tags:POJ 2774 哈希 +二分 长度

思路:这题一看就知道是后缀数组做的了,好像以前做过,不过现在专攻哈希,所以就用哈希做了。

不过这题我真是要疯了!!!

刚开始写的就对了,然后二分while循环那忘了写等号了,然后一直WA,尼玛,然后自己居然给出一组样例:

bbaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaa

这组的样例中的长度为6和7的时候哈希值居然不一样,然后输出了6;然后逗B的以为哈希是有bug的,然后改来改去,把哈希种子改成:131,1313,13131,131313,1313131,13131313,131313131,1313131313,100000007,都不行;又改了哈希的做法,依然狂WA不止。然后用了别人博客的哈希方法测了一下,发现这组例子居然答案也是6,这下就发现了自己二分的错了……搞了一晚上,错在细节上了,晕!!!!!!!!!!!!!!!!!!!!!!!!!!

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
  
   
#include
   
     #include
    
      #include
     
       #include
       #include
       
         #include
        
          #include
         
           #include
          
            #define mem(a,b) memset(a,b,sizeof(a)) #define lson i<<1,l,mid #define rson i<<1|1,mid+1,r #define llson j<<1,l,mid #define rrson j<<1|1,mid+1,r #define INF 0x7fffffff #define maxn 100105 typedef long long ll; typedef unsigned long long ull; using namespace std; ull base[maxn],seed=131,one[maxn],aa[maxn]; char s[maxn],str[maxn]; int len1,len2; bool judge(int n) { int i; aa[0]=0; for(i=1;i<=n;i++) aa[i]=aa[i-1]*seed+s[i-1]-'a'+1; one[0]=aa[i-1]; int k=1; for(;i<=len1;i++) { aa[i]=aa[i-1]*seed+s[i-1]-'a'+1; one[k++]=aa[i]-aa[i-n]*base[n]; } sort(one,one+k); for(int j=0;j
           
            >1; if(judge(mid)) l=mid+1,ans=mid; else r=mid-1; } printf("%d\n",ans); return 0; } 
           
          
         
        
       
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Appium和UIAutomator英文和数字输.. 下一篇Xcode如何打包ipa安装包以及出现..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·利用python进行数据 (2025-12-25 20:49:22)
·如何使用 python 中 (2025-12-25 20:49:19)
·零基础如何学爬虫技 (2025-12-25 20:49:17)
·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)