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

POJ3415CommonSubstrings(后缀数组)

DescriptionAsubstringofastringTisdefinedas:T(i,k)TiTi+1Ti+k-1,1≤i≤i+k-1≤|T|.Giventwos

Description


A substring of a string T is defined as:

 


T(ik)=TiTi+1...Ti+k-1,
1≤ii+k-1≤|T|.

 

Given two strings AB and one
integer K, we define S, a set of triples
(ijk):

 


S = {(ijk)
kKA(ik)=B(jk)}.

 

You are to give the value of |S| for
specific AB and K.

Input


The input file contains several blocks of data. For each block, the first
line contains one integer K, followed by two lines containing
strings A and B, respectively. The input file
is ended by K=0.

1 ≤ |A|, |B| ≤ 105
1
≤ K ≤ min{|A|,
|B|}
Characters of A and B are
all Latin letters.

Output


For each case, output an integer |S|.

 

题目大意:给两个字符串,问有多少个长度大于等于K的公共子串。

思路:有空写。

 

代码(1469MS):


bubuko.com,布布扣class="code_img_closed" id="code_img_closed_911745b1-cab6-4bf6-a022-31194e6555f6"
src="https://img8.php1.cn/3cdc5/1e70e/b64/1eb20d75804f997b.gif">bubuko.com,布布扣class="code_img_opened" id="code_img_opened_911745b1-cab6-4bf6-a022-31194e6555f6"
Onclick="cnblogs_code_hide(‘911745b1-cab6-4bf6-a022-31194e6555f6‘,event)"
src="https://img8.php1.cn/3cdc5/1e70e/b64/4175056ff18c44e5.gif">

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std;
7 typedef long long LL;
8
9 const int MAXN = 200010;
10
11 char s[MAXN];
12 int sa[MAXN], rank[MAXN], height[MAXN], c[MAXN], tmp[MAXN];
13 int n, apart, k;
14
15 void makesa(int m) {
16 memset(c, 0, m * sizeof(int));
17 for(int i = 0; i s[i]];
18 for(int i = 1; i 1];
19 for(int i = 0; i i;
20 for(int k = 1; k 1) {
21 for(int i = 0; i i) {
22 int j = sa[i] - k;
23 if(j <0) j += n;
24 tmp[c[rank[j]]++] = j;
25 }
26 int j = c[0] = sa[tmp[0]] = 0;
27 for(int i = 1; i i) {
28 if(rank[tmp[i]] != rank[tmp[i - 1]] || rank[tmp[i] + k] != rank[tmp[i - 1] + k])
29 c[++j] = i;
30 sa[tmp[i]] = j;
31 }
32 memcpy(rank, sa, n * sizeof(int));
33 memcpy(sa, tmp, n * sizeof(int));
34 }
35 }
36
37 void calheight() {
38 for(int i = 0, k = 0; i k) {
39 k -= (k > 0);
40 int j = sa[rank[i] - 1];
41 while(s[i + k] == s[j + k]) ++k;
42 }
43 }
44
45 struct Node {
46 int height, cnt;
47 Node(int height = 0, int cnt = 0): height(height), cnt(cnt) {}
48 };
49
50 LL solve() {
51 LL ans = 0, sum = 0;
52 stack stk;
53
54 for(int i = 1; i i) {
55 int cnt = 0;
56 while(!stk.empty() && stk.top().height >= height[i]) {
57 Node t = stk.top(); stk.pop();
58 cnt += t.cnt;
59 sum -= t.cnt * (t.height - k + 1LL);
60 }
61 if(height[i] >= k) {
62 cnt += (sa[i - 1] < apart);
63 if(cnt) stk.push(Node(height[i], cnt));
64 sum += cnt * (height[i] - k + 1LL);
65 }
66 if(sa[i] > apart) ans += sum;
67 }
68
69 while(!stk.empty()) stk.pop();
70 sum = 0;
71
72 for(int i = 1; i i) {
73 int cnt = 0;
74 while(!stk.empty() && stk.top().height >= height[i]) {
75 Node t = stk.top(); stk.pop();
76 cnt += t.cnt;
77 sum -= t.cnt * (t.height - k + 1LL);
78 }
79 if(height[i] >= k) {
80 cnt += (sa[i - 1] > apart);
81 stk.push(Node(height[i], cnt));
82 sum += cnt * (height[i] - k + 1LL);
83 }
84 if(sa[i] sum;
85 }
86
87 return ans;
88 }
89
90 int main() {
91 while(scanf("%d", &k) != EOF && k) {
92 scanf("%s", s);
93 apart = strlen(s);
94 s[apart] = $;
95 scanf("%s", s + apart + 1);
96 n = strlen(s) + 1;
97 makesa(128);
98 calheight();
99 cout<endl;
100 }
101 }

class="cnblogs_code_collapse">View Code

 


推荐阅读
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 捕获并处理用户输入数字时的异常,提供详细的错误提示与指导
    在用户输入数字时,程序能够有效捕获并处理各种异常情况,如非法字符或格式错误,并提供详尽的错误提示和操作指导,确保用户能够准确输入有效的数字数据。通过这种方式,不仅提高了程序的健壮性和用户体验,还减少了因输入错误导致的系统故障。具体实现中,使用了Java的异常处理机制,结合Scanner类进行输入读取和验证,确保了输入的合法性和准确性。 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • Python 中 json.dumps() 和 json.loads() 的使用方法详解——Python 面试与 JavaScript 面试必备知识
    在 Python 中,`json.dumps()` 和 `json.loads()` 是处理 JSON 数据的核心函数。`json.dumps()` 用于将字典或其他可序列化对象转换为 JSON 格式的字符串,而 `json.loads()` 则用于将 JSON 字符串解析为 Python 对象。本文详细介绍了这两个函数的使用方法及其在 Python 和 JavaScript 面试中的重要性,帮助读者掌握这些关键技能。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • VC维在机器学习中的应用与解析
    VC维在机器学习中的应用与解析VC维是指在机器学习中,一个假设空间能够正确分类的最大样本数量。具体而言,如果一个假设空间能够将N个样本以所有可能的 \(2^N\) 种方式完全分开,则称该假设空间具有N的VC维。VC维是衡量模型复杂度的重要指标,对于理解模型的泛化能力和过拟合风险具有重要意义。本文详细探讨了VC维的定义、计算方法及其在机器学习中的应用,并通过实例分析展示了其在模型选择和评估中的关键作用。 ... [详细]
author-avatar
Carol卍_932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有