Luogu P2463 [SDOI2008]Sandy的卡片

题目链接 \(Click\) \(Here\)

真的好麻烦啊。。事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦。。(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\)

这个题最开始我想的是\(RMQ\)遍历每一个子区间,但是意识到复杂度是\(O(N^2)\)然后就\(GG\)了。怎么说呢,后缀数组和二分似乎是很常见的组合(和莫队也是?),这个题只需要在\(height\)数组里二分\(lcp\)长度即可,\(check\)函数里面处理一下,要让区间内所有原串都有至少一个子串。

#include <bits/stdc++.h>
using namespace std;const int N = 200010;int s[N], id[N];
int n, m, num, len, tot = 10000;
int sa[N], tp[N], rk[N], _rk[N], bin[N], height[N];void get_height (int n) {int k = 0;for (int i = 1; i <= n; ++i) {if (k != 0) k--;int j = sa[rk[i] - 1];while (s[i + k] == s[j + k]) k++;height[rk[i]] = k;}
}void base_sort (int n, int m) {for (int i = 0; i <= m; ++i) bin[i] = 0;for (int i = 1; i <= n; ++i) bin[rk[tp[i]]]++;for (int i = 1; i <= m; ++i) bin[i] += bin[i - 1];for (int i = n; i >= 1; --i) sa[bin[rk[tp[i]]]--] = tp[i];
}void suffix_sort (int n, int m) {for (int i = 1; i <= n; ++i) {rk[i] = s[i];tp[i] = i;}base_sort (n, m);for (int w = 1; w <= n; w <<= 1) {int cnt = 0;for (int i = n - w + 1; i <= n; ++i) {tp[++cnt] = i;}for (int i = 1; i <= n; ++i) {if (sa[i] > w) {tp[++cnt] = sa[i] - w;}}base_sort (n, m);memcpy (_rk, rk, sizeof (rk));rk[sa[1]] = cnt = 1;for (int i = 2; i <= n; ++i) {rk[sa[i]] = _rk[sa[i]] == _rk[sa[i - 1]] && _rk[sa[i] + w] == _rk[sa[i - 1] + w] ? cnt : ++cnt;}if (cnt == n) break;m = cnt;}
}bool vis[1010]; int sta[N], top = 0;bool can_use (int l) {while (top) vis[sta[top--]] = false;for (int i = 1; i <= len; ++i) {if (height[i] < l) {while (top) vis[sta[top--]] = false;}if (!vis[id[sa[i]]]) {vis[id[sa[i]]] = true;sta[++top] = id[sa[i]];if (top == n) return true;}}return false;
}int main () {cin >> n;int ban = 2000;for (int i = 1; i <= n; ++i) {cin >> m;for (int j = 1; j <= m; ++j) {cin >> s[++len]; //把所有的字符串整合到一个里id[len] = i; // 表明主权(len号后缀(的lcp)属于串i)}s[++len] = ++ban; //隔开}for (int i = len; i >= 1; --i) {s[i] = s[i] - s[i - 1] + 4000;}suffix_sort (len, 10000);get_height (len);int l = 0, r = len;while (l < r) {int mid = (l + r + 1) >> 1;if (can_use (mid)) {l = mid;} else {r = mid - 1;}}cout << l + 1 << endl;
}

转载于:https://www.cnblogs.com/maomao9173/p/10438209.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

1 日志路径带来的痛点Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径.本文借鉴 Tomcat 的…

常用数据结构

字典&#xff1a;即map&#xff0c;映射&#xff0c;通过key>value的方式直接查找与之对应的值&#xff0c;实现一般是hash表或二叉树跳跃表&#xff1a;本质是链表&#xff0c;只不过将数据进行提取分层&#xff0c;将总数据置为底层&#xff0c;提取2、4、的倍数为第一二层…

java jasypt_Jasypt

软件简介Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能&#xff0c;包括&#xff1a;密码Digest认证&#xff0c;文本和对象加密&#xff0c;集成hibernate&#xff0c;SpringSecurity(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1…

ZABBIX监控JAVA日志文件

最近开发人员有一个需求&#xff0c;监控java程序的报错日志&#xff0c;如日志中包含“ERROR”关键字的信息&#xff0c;就邮件告警&#xff0c;以下是具体实现方法。 一、创建模板以上是已经创建好的模板&#xff0c;名为“Template App Java logs”创建应用集二、创建监控项…

如何快速把音乐转成MP3格式

身边有这样一群朋友经常搞音乐&#xff0c;仿佛生活的乐趣只有音乐&#xff0c;不能也能理解&#xff0c;谁没有点自己的爱好呢&#xff1f;但是如果想要在茫茫人海中成为佼佼者&#xff0c;并不是这么容易的&#xff0c;但是我们要在速度上赢更多的人&#xff0c;所以写了这篇…

new URI(zk_servers_1) 路径包含下划线无法获取host的问题

spring cloud gateway使用zookeeper作为注册中心调用其它服务的时候报了下面这个错误&#xff1a; ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范围_JAVAEE之内置对象和属性范围

内置对象和属性范围四种属性范围九个内置对象1.内置对象如果说想要使用一个对象&#xff0c;必须new 出来&#xff0c;但是在我们的jsp操作中&#xff0c;发现我们使用过的out,request对象没有进行实例化&#xff0c;类似于这样的对象&#xff0c;我们叫做jsp的内置对象&#x…

JavaWeb学习笔记(九)--HttpServletResponse

web服务器接收到客户端的HTTP请求&#xff0c;会针对每一次请求&#xff0c;分别创建一个用于代表请求的request对象和代表响应的response对象。 request和response对象既然代表请求和响应&#xff0c;那我们要获取客户端提交过来的数据&#xff0c;只需要找request对象即可。要…

java html5 上传_HTML5结合ajax实现文件上传以及进度显示

基于原生html5实现&#xff0c;不需要falsh支持&#xff0c;进度可以自定义显示&#xff0c;控制灵活&#xff0c; 本来打算使用jquery插件进行异步文件上传&#xff0c;比如uploadfy但是需要额外的支持&#xff0c;也有人用iframe模仿异步上传机制&#xff0c;感觉都比较别扭。…

7天玩转机器学习

7天玩转机器学习 人工智能时代&#xff0c;数据迎来大爆发&#xff0c;数据对于提升业务价值的重要性与日俱增。但面对海量数据&#xff0c;传统分析方法已经显得无能为力&#xff0c;而机器学习的成熟为企业带来了强大的分析引擎&#xff0c;可在众多领域帮助企业挖掘数据价值…

centos 6.5 yum java_Centos6.5 yum 安装jdk1.8

centos 6.5 安装卸载jdk-- 查看有没有预装jdk版本java -version-- 查看已安装的版本rpm -qa|grep java-- 卸载预装版本 rpm -e --nodeps 命令卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安装的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//筛选符合条件的记录Aggregation…

一次面试总结(记录)

1,从一个数组里找重复出现次数最多的一个数&#xff1f;2,常用的linux命令3.垃圾收集器有哪些 &#xff1f;垃圾收集算法&#xff1f;4,线上服务器变慢了你是如何定位问题并处理的&#xff1f;5,你自己实现一个本地缓存,淘汰最久未使用,你怎么设计6,用栈实现计算器7,剔除二叉树…

java 累加 0-9 a-z_JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

一、获得0-9,a-z,a-z范围的随机字符串/*** java获得0-9,a-z,a-z范围的随机数* param length 随机数长度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 扩展开发】Zephir 基础篇

上一篇 《Zephir 简介》 简单介绍了环境搭建&#xff0c;编写了一个的简单示例。这一篇继续介绍 Zephir 基础。 基本语法Zephir 中&#xff0c;每个文件都必须有且只有一个类&#xff0c;每个类都必须有一个命名空间&#xff0c;目录结构必须与所使用的类和命名空间的名称相匹配…

java常见排序算法有哪些_Java中常用的6种排序算法详细分解

排序算法很多地方都会用到&#xff0c;近期又重新看了一遍算法&#xff0c;并自己简单地实现了一遍&#xff0c;特此记录下来&#xff0c;为以后复习留点材料。废话不多说&#xff0c;下面逐一看看经典的排序算法&#xff1a;1. 选择排序选择排序的基本思想是遍历数组的过程中&…

python range函数

这个函数很简单&#xff0c;就不写例子了&#xff0c;看看语法&#xff0c;拿来即用 python range() 函数可创建一个整数列表&#xff0c;一般用在 for 循环中。 函数语法 range(start, stop[, step]) 参数说明&#xff1a; start: 计数从 start 开始。默认是从 0 开始。例如ra…

java tomcat重启linux_Linux下tomcat重启

进入Tomcat下的bin目录cd/user/local/tomcat/bin关闭tomcat./shutdown.sh查看tomcat是否关闭ps -ef|grep java显示以下信息&#xff0c;则Tomcat还未关闭root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file/usr/loca…

左偏树 P3377【模板】左偏树(可并堆)

题目传送门 代码&#xff1a; /* code by: zstu wxk time: 2019/03/01 */ #include<bits/stdc.h> using namespace std; #define Fopen freopen("testdata.in","r",stdin); freopen("_out.txt","w",stdout); #define LL long lo…

lock 线程 java_JAVA多线程-基础Lock Condition 并发集合

跟上一篇文章比较,这次改进了之前的代码,使用了Lock Condition 和并发集合.代码量减了一些,并且更加容易读了.这篇代码是上一篇的改进版,逻辑在前篇有说明,以防大家看不到,我再重现贴一遍.后续会使用高阶的线程工具再次改进,以求代码更简单.代码的逻辑:1)SProducer不停的产生nu…