当前位置: 首页 > 编程日记 > 正文

Boring counting HDU - 3518 (后缀数组)

Boring counting

\[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \]

题意

给出一个字符串,求出其中出现两次及以上的子串个数,要求子串之间不可以重合。

思路

对字符串后缀数组,然后枚举子串长度 \(len\),若某一段连续的 \(sa[i]\)\(lcp \geq len\),那么说明这一段内存在一个长度为 \(lcp\) 的子串,而我们只需要其中的前 \(len\) 部分,接下来只要找出这个子串出现的最左和最右位置,然后判断中间能否放下这个长度为 \(len\) 的子串就可以了,如果可以的话,就让 \(ans\)++。


\(Hint\)
这题还让我学到后缀数组的另一个细节,在构建后缀数组之前,要在末尾加上一个比所有字符都小的字符,因为在求 \(height\) 的时候需要判断 \(a[i+k]==a[j+k]\),否则这里可能会无限扩展下去。

/***************************************************************> File Name    : a.cpp> Author       : Jiaaaaaaaqi> Created Time : 2019年05月23日 星期四 22时40分17秒***************************************************************/#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pii        pair<int, int>typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 1e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;int n, m;
int cas, tol, T;char s[maxn];
int a[maxn], sa[maxn], tp[maxn], tax[maxn], rk[maxn], height[maxn];void rsort(int n, int m) {for(int i=0; i<=m; i++) tax[i] = 0;for(int i=1; i<=n; i++) tax[rk[tp[i]]]++;for(int i=1; i<=m; i++) tax[i] += tax[i-1];for(int i=n; i>=1; i--) sa[tax[rk[tp[i]]]--] = tp[i];
}int cmp(int *f, int x, int y, int w) {return f[x]==f[y] && f[x+w]==f[y+w];
}void SA(int *a, int n, int m) {for(int i=1; i<=n; i++) rk[i] = a[i], tp[i] = i;rsort(n, m);for(int w=1, p=1, i; p<n; w<<=1, m=p) {for(p=0, i=n-w+1; i<=n; i++)    tp[++p] = i;for(i=1; i<=n; i++) if(sa[i] > w)   tp[++p] = sa[i]-w;rsort(n, m), swap(rk, tp);rk[sa[1]] = p = 1;for(i=2; i<=n; i++) rk[sa[i]] = cmp(tp, sa[i], sa[i-1], w) ? p : ++p;}int j, k=0;for(int i=1; i<=n; height[rk[i++]] = k)for(k = k ? k-1 : k, j=sa[rk[i]-1]; a[i+k]==a[j+k]; k++);
}int calc(int len) {int ans = 0;int mx, mn;mx = -inf, mn = inf;for(int i=2; i<=n; i++) {if(height[i]>=len) {mx = max(mx, max(sa[i], sa[i-1]));mn = min(mn, min(sa[i], sa[i-1]));} else {if(mx - mn >= len)  ans++;mx = -inf, mn = inf;}}if(mx - mn >= len)  ans++;return ans;
}int main() {while(scanf("%s", s+1)) {if(s[1] == '#') break;n = strlen(s+1);s[++n] = 2;for(int i=1; i<=n; i++) {a[i] = s[i];}SA(a, n, 260);// for(int i=1; i<=n; i++) {//     printf("sa[%d] = %d\n", i, sa[i]);// }int ans = 0;for(int i=1; i<=(n+1)/2; i++) {ans += calc(i);}printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/Jiaaaaaaaqi/p/10915328.html

相关文章:

什么是JTAG

JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议&#xff08;IEEE 1149.1兼容&#xff09;&#xff0c;主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议&#xff0c;如DSP、FPGA器件等。标准的JTAG接口是4线&#xff1a;TMS、 TCK、TDI、TDO&a…

Java项目:个人博客系统(java+SSM+Mysql+Servlet+JavaWeb)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 项目内容包括&#xff1a;首页&#xff0c;登陆&#xff0c;新建文章&#xff0c;搜索&#xff0c;登陆日志&#xff0c;登录次数&#xff0c;评论统计&#xff0c;相关信息&#xff0c;文章列…

Lucene4 入门(2)–Field类及辅助类说明

2019独角兽企业重金招聘Python工程师标准>>> Lucene4 入门(2)–Field类及辅助类说明 一、Eclipse中Field类的继承关系图&#xff1a; 二、Field类 1、 类的说明 在一般情况下为Document对象创建一个Field对象会使用它的子类&#xff0c;比如&#xff1a; IntField,…

C#入门详解(4)

什么是类型 类型又名数据类型。表示数据在内存中存储时的型号。小内存容纳大尺寸数据会丢失精度&#xff0c;发生错误。 大内存容纳小尺寸的数据会导致内存浪费。 编程语言的数据类型与数据的数据类型不完全相同。 类型在C#语言中的作用 类型所包含的信息有&#xff1a; 存储此…

使用 Trace32 对 FLASH 编程

from: http://www.ibm.com/developerworks/cn/linux/l-trace32/随着软硬件复杂性的增加&#xff0c;在嵌入式系统开发中&#xff0c;调试器对项目的开发进度、质量起着越来越重要的作用。在众多的调试器中&#xff0c;Lauterbach 公司的 Trace32 凭借其强大的功能&#xff0c…

Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

导航目 录&#xff1a;Farseer.net轻量级ORM开源框架 目录 上一篇&#xff1a;没有了 下一篇&#xff1a;Farseer.net轻量级ORM开源框架 V1.x 入门篇&#xff1a;数据库配置 前言V1.x版本终于到来了。本次版本的开发从3月份开始&#xff0c;花了一个月的时间完成了概念版本设…

Java项目:健身管理系统(Java+ssm+springboot)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 主要技术&#xff1a;springmvc、 springboot 、mybatis、mysql 、jQuery、layui、css、jsp shiro权限控制 主要功能截图如下&#xff1a; 用户登录、首页主要功能有&#xff1a;会员信息管理、会员到期续费…

计算几何算法概览

为什么80%的码农都做不了架构师&#xff1f;>>> 计算几何算法概览一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化&#xff0c;但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案&#xff0c;比如几何问题。作为计算…

诚意租房网blog2

&#xff08;一&#xff09;数据库设计部分&#xff1a; 创建数据库hourse: 1&#xff1a;关注表 CREATE TABLE guanzhu ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) DEFAULT NULL, hid int(11) DEFAULT NULL, time datetime DEFAULT NULL, PRIMARY KEY (id) ) ENGINEI…

基于S3C4510B的一个简单BSP的开发报告

系统环境 &#xff08;一&#xff09; 硬件环境 CPU&#xff1a;S3C4510B SDRAM:W981216DH 16M FLASH:MX29LV160AB 2M &#xff08;二&#xff09; 软件环境 tornado2.01 for arm&#xff08;AKA的FTP上有tornado2.2需要的可以自己去下载&#xff1a;&#…

Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a; 房屋租赁管理系统是一款方便快捷&#xff0c;易操作的租房和各种物业收费的管理系统&#xff0c;该系统官网包含着用户和管理员分类登录&#xff0c;减少了为使用管理员…

sdtz技术组成

发送短信数据库表到第二天就删除前一天的的内容重新建表是用触发器功能实现的 回款、发标、发短信一些核心功能是用windows服务运行在服务器上自动运行的 sql管理中的维护计划就能设置自动备份数据库转载于:https://www.cnblogs.com/zheng510ke/p/4562812.html

13个 ASP.NET MVC 的扩展

ASP.NET MVC设计的主要原则之一是可扩展性。处理管线&#xff08;processing pipeline&#xff09;上的所有&#xff08;或大多数&#xff09;东西都是可替换的。因此&#xff0c;如果您不喜欢ASP.NET MVC所使用的约定&#xff08;或缺乏某些约定&#xff09;&#xff0c;您可以…

javascript实例

数组排序 ①冒泡排序 思路&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。针对所有的元素重复以上的步骤&#xff…

Ubuntu10.04安装Flash插件

1. 从Adobe下载Flash安装程序&#xff0c;并且解压。 tar -xzvf install_flash_player_10_linux.tar.gz 2. 把解压出来的“libflashplayer.so” 复制到 /usr/lib/mozilla/plugins 目录下。 sudo cp libflashplayer.so /usr/lib/mozilla/plugins 3. 执行以下命令&#x…

Java项目:健身俱乐部管理系统(java+SSM+Mysql+Jsp)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目介绍&#xff1a; 基于jspmysqlSpringmybatis的SSM健身房管理系统 运行环境: jdk 1.8 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可&#xf…

通过代理进行页面传值

A 页面跳转到 B页面&#xff0c;在关闭B页面的时候想将B页面的某些内容回传给A页面 在B页面写代理的相关方法 protocol 控制器的名称 Delegate <NSObject> optional -(void) xxxxxx:(控制器 *) control end interface 控制器 : UIViewController property (weak,nonatom…

Linux系统下如何安装软件包

现在一般是使用 RPM &#xff0c;YUM 和 APT 来管理软件包。软件包常用的也就是&#xff0c;查找软件包&#xff0c;安装&#xff0c;卸载&#xff0c;升级。这几个功能。RPM 比较经典&#xff0c;但是也比较麻烦&#xff0c;尤其是在软件依赖关系上面&#xff0c;有的时…

自己设计大学排名-数据库实践

今天我们来学习以下有关于数据提取以及数据库的一些知识&#xff0c; 我们知道其实数据库是一个非常神奇的存在&#xff0c;它是是按照 数据结构来组织、 存储和管理数据的仓库 我们可以使用它对数据进行储存和管理&#xff01; 下面是有关于sqlite3的学习&#xff0c;SQLite3 …

Windows 和 Linux 应用程序从上到下调用层次比较

刚毕业的时候&#xff0c;做了将近一年的Window下的程序开发&#xff0c;主要用MFC&#xff0c;那是也不明白程序在操作系统角度从上到下的整个调用层次。遇到调用库函数&#xff0c;不明白&#xff0c;就查MSDN&#xff0c;每个月1500行代码左右&#xff0c;那时以为这就是软件…

Java项目:药品管理系统(java+swing+Gui+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能介绍&#xff1a;用户管理、药品库存管理、进销管理、营销管理、药品购入、药品售出、药市信息 系统主页&#xff1a; SuppressWarnings("serial") public class SystemMainView extends JFr…

WEBSHELL跳板REDUH使用说明

原文链接: http://www.fendou.info/network/webshell-proxy-reduh.html reDuh是可以把内网服务器的端口通过http或https隧道转发到本机&#xff0c;形成一个TCP连通回路&#xff0c;用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部端口的工具。 reDuh和LCX类似&…

站立会议(三)

一、会议时间&#xff1a;2014年4月13日 二、会议目的&#xff1a;统计项目进度以及每个人的进度、计划以及问题 三、会议内容&#xff1a; 党云龙&#xff1a; 今天内容 查阅资料&#xff0c;上网搜索&#xff0c;完成API调用&#xff1b; 遇到问题 还是在实现的时候无法阻止…

python celery

celery 一般用于做异步 和定时任务 不过听网上说 celery 坑还是蛮多的&#xff0c;特别定时任务&#xff0c;我们一般用来做定时任务&#xff0c;还有数据导入导出。celery 不支持 redis cluster 集群模式uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任…

c语言实现memcpy

今天到I 公司去面试&#xff0c;面试方式比较特殊&#xff0c;没有笔试&#xff0c;就是2 个面试官&#xff0c;一人一句轮番发问&#xff0c;涉及面很广&#xff0c;涉及到操作系统(MMU 、page out 、process/thread 、semaphore 、interrupt), OOP( 多态、design pattern) 、…

Java项目:图书管理系统(java+swing+Gui+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能介绍&#xff1a;借阅列表、图书类别管理、图书馆里、用户管理、借阅管理、关于我们 登录服务类&#xff1a; WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet …

十五天精通WCF——第三天 client如何知道server提供的功能清单

通常我们去大保健的时候&#xff0c;都会找姑娘问一下这里能提供什么服务&#xff0c;什么价格&#xff0c;这时候可能姑娘会跟你口述一些服务或者提供一份服务清单&#xff0c;这样的话大 家就可以做到童嫂无欺&#xff0c;这样一份活生生的例子&#xff0c;在wcf中同样是一个…

MySQL Cluster 日常维护

在前面几篇文章已经详细介绍了MySQL Cluster的搭建&#xff0c;配置讲解。而且相信大家都掌握了基本用法。现在我们来看看Cluster的日常维护。熟悉日常维护&#xff0c;将有助于工作中更好的管理和使用Cluster。 一. 数据备份 相信大家都熟悉mysql的日常备份工具&#xff0c;比…

20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告

20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告 一、个人贡献 参与课设题目讨论及完成全过程&#xff1b; 资料收集&#xff1b; 负责环境搭建&#xff0c;代码运行下载&#xff1b; 撰写小组结题报告。 二、设计中遇到的问题及解决方法 1 实验六以太网服…

extern数组与extern指针

数组名代表了存放该数组的那块内存&#xff0c;它是这块内存的首地址。这就说明了数组名 是一个地址&#xff0c;而且&#xff0c;还是一个不可修改的常量&#xff0c;完整地说&#xff0c;就是一个地址常量。数组名 跟枚举常量一样&#xff0c;都属于符号常量。数组名 这个符号…