热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UVa12206(字符串哈希)StammeringAliens

体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇。也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低。1#include2#include3#in

体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇。

也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低。

技术分享技术分享
 1 #include 
 2 #include 
 3 #include 
 4 using namespace std;
 5 
 6 const int maxn = 40000 + 10;
 7 const int x = 123;
 8 int n, m, pos;
 9 unsigned long long H[maxn], xp[maxn];
10 unsigned long long hash[maxn];
11 int rank[maxn];
12 char s[maxn];
13 
14 bool cmp(const int& a, const int& b)
15 { return hash[a]  b); }
16 
17 bool possible(int L)
18 {
19     int cnt = 0;
20     pos = -1;
21     for(int i = 0; i + L - 1 )
22     {
23         rank[i] = i;
24         hash[i] = H[i] - H[i + L] * xp[L];
25     }
26     sort(rank, rank + n - L + 1, cmp);
27     for(int i = 0; i + L - 1 )
28     {
29         if(i == 0 || hash[rank[i]] != hash[rank[i - 1]]) cnt = 0;
30         if(++cnt >= m) pos = max(pos, rank[i]);
31     }
32     return pos >= 0;
33 }
34 
35 int main()
36 {
37     //freopen("in.txt", "r", stdin);
38 
39     xp[0] = 1;
40     for(int i = 1; i 1] * x;
41 
42     while(scanf("%d", &m) == 1 && m)
43     {
44         scanf("%s", s);
45         n = strlen(s);
46         H[n] = 0;
47         for(int i = n - 1; i >= 0; i--) H[i] = H[i + 1] * x + s[i] - a;
48 
49         if(!possible(1)) puts("none");
50         else
51         {
52             int L = 1, R = n;
53             while(L < R)
54             {
55                 int M = (L + R + 1) / 2;
56                 if(possible(M)) L = M;
57                 else R = M - 1;
58             }
59             possible(L);
60             printf("%d %d\n", L, pos);
61         }
62     }
63 
64     return 0;
65 }
代码君

UVa 12206 (字符串哈希) Stammering Aliens


推荐阅读
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
author-avatar
瓷娃娃2502929883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有