Annihilate(SA)
题目描述
黑暗之主的蜈蚣几乎可以毁灭一切,因此小正方形陷入了苦战……
小正方形现在需要减弱黑暗之主的攻击。
一个黑暗之主的攻击可以用一个仅有小写字母的字符串表示。
现在黑暗之主向小正方形发动了若干攻击,对于两个攻击,小正方形能选出它们最长的公共子串,并把这一段消除。
现在小正方形想要知道,对于任意两个黑暗之主的攻击,它们的最长公共子串长度是多少,你能帮帮它吗?
题解
我是个**,字符集会随着SA往后进行越来越大,数组开小调了俩小时。。
用SAM是板子,但它卡空间,所以把它接起来跑一边SA。
我们按照字典序扫描所有后缀,维护一个数组,表示在当前位置到之前x个串的LCS,每次O(n)更新一遍。
代码
#include<iostream>
#include<cstdio>
#define N 2100002
using namespace std;
char s[N];
int rnk[N],y[N],sa[N],n,x,ji[N],m,tong[N],pre[],height[N],ans[][],tot;
inline void init(int x){
char c=getchar();
while(!isalpha(c))c=getchar();
while(isalpha(c))s[++n]=c,ji[n]=x,c=getchar();
}
inline void qsort(){
for(int i=;i<=m;++i)tong[i]=;
for(int i=;i<=n;++i)tong[rnk[i]]++;
for(int i=;i<=m;++i)tong[i]+=tong[i-];
for(int i=n;i>=;--i)sa[tong[rnk[y[i]]]--]=y[i];
}
inline void SA(){
for(int i=;i<=n;++i)rnk[i]=s[i],y[i]=i;
m=;qsort();
for(int w=,p;p<n;m=p,w<<=){
p=;
for(int i=n-w+;i<=n;++i)y[++p]=i;
for(int i=;i<=n;++i)if(sa[i]>w)y[++p]=sa[i]-w;
qsort();
swap(rnk,y);rnk[sa[]]=p=;
for(int i=;i<=n;++i)rnk[sa[i]]=((y[sa[i-]]==y[sa[i]])&&(y[sa[i-]+w]==y[sa[i]+w]))?p:++p;
}
for(int i=;i<=n;++i){
if(rnk[i]==)continue;
int j=max(,height[rnk[i-]]-);
while(s[i+j]==s[sa[rnk[i]-]+j])j++;
height[rnk[i]]=j;
}
for(int i=;i<=n;++i){
for(int j=;j<=tot;++j)pre[j]=min(pre[j],height[i]);
pre[ji[sa[i-]]]=max(pre[ji[sa[i-]]],height[i]);
for(int j=;j<=tot;++j)ans[ji[sa[i]]][j]=ans[j][ji[sa[i]]]=max(ans[j][ji[sa[i]]],pre[j]);
}
}
int main(){
scanf("%d",&tot);
for(int i=;i<=tot;++i){init(i);s[++n]=i;}
SA();
for(int i=;i<=tot;++i){
for(int j=;j<=tot;++j)if(i!=j)printf("%d ",ans[i][j]);
puts("");
}
return ;
}
Annihilate(SA)的更多相关文章
- P5028 Annihilate
P5028 Annihilate 50个串,任意两两的最长公共子串 回忆最长公共子串求法 1.hash+二分 2.SAM 3.SA,属于不同的串的hei的max 1.hash+二分 暴力两两枚举再跑的 ...
- QL Server 2008 所有账号丢失sysadmin权限,sa账号亦没有开启,该如何解决??
1. 用Run as a administrator打开命令提示符里输入NET STOP MSSQLSERVER, 即停止MSSQLSERVER运行. 2. 在命令提示符里输入 NET START M ...
- 没有了SA密码,无法Windows集成身份登录,DBA怎么办?
一同事反馈SQL无法正常登录了,以前都是通过windows集成身份验证登录进去的(sa密码早忘记了),今天就改了服务器的机器名,现在无论如何都登录不进去. SQL登录时如果采用windows集成身份验 ...
- SqlServer windowss身份登陆和sa身份登陆
今天重新装了系统,但是计算机名变了,于是修改了计算机名,然后装了SQLSEVER,安装完成后登录,发现无论用WINDOWS身份还是SQLSERVER身份都登录不了 1.先说说sqlserver身份登录 ...
- 【JBOSS】User not found SA
启动JBOSS 发现报User not found: SA 错误, 找了老半天才找到处理方法,异常日志如下: java.sql.SQLException: User not found: SA at ...
- Cannot set a credential for principal 'sa'. (Microsoft SQL Server,错误: 15535)
在SQL SERVER 2008上上禁用sa登录时,遇到下面错误:"Cannot set a credential for principal 'sa'. (Microsoft SQL Se ...
- ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联
用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...
- Sa yo na ra
总想记点些什么. 都快忘了当初是为什么来到这里呢... 2014年10月,友人给我介绍了一门编程竞赛ACM,并给我演示了一下A+B.于是我知道了ACM的含义. 2014年12月,开始水入门题. 201 ...
- SQL_Server_2008修改sa密码的方法
转载自:http://blog.csdn.net/templar1000/article/details/20211191 1. 先用Window身份验证方式登陆进去,选择数据库实例,右键选择属性—— ...
随机推荐
- 面向对象设计的SOLID原则、迪米特法则
SPR(The Single Responsibility Principle):单一责任原则 OCP(The Open Closed Principle):开放封闭原则 LSP(The Liskov ...
- IdentityServer4【QuickStart】之使用asp.net core Identity
使用asp.net core Identity IdentityServer灵活的设计中有一部分是可以将你的用户和他们的数据保存到数据库中的.如果你以一个新的用户数据库开始,那么,asp.net co ...
- C#中使用打印日志
在日常的工作中经常需要日志,这样能够很容易定位到代码中的一些错误,.Net中有自带的日志接口.并没有仔细去研究,这里是我自己写的日志接口,记录下来以便以后用到,根据时间打印相关的日志文件,代码如下: ...
- Velocity中判断是否为空
方法一: 使用 #ifnull() 或 #ifnotnull() eg:#ifnull ($foo) 要使用这个特性必须在velocity.properties文件中加入: userdirective ...
- Mybatis 配置resultMap一对多关联映射
resultMap配置: 引用: PO类: 接口: 测试: public class UserMapperTest { private SqlSessionFactory sqlSessionFact ...
- 初次启动hive,解决 ls: cannot access /home/hadoop/spark-2.2.0-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory问题
>>提君博客原创 http://www.cnblogs.com/tijun/ << 刚刚安装好hive,进行第一次启动 提君博客原创 [hadoop@ltt1 bin]$ ...
- .Net在操作mysql查询的时候出现“: Unknown column 'UserName' in 'where clause'”错误
今天使用.Net操作mysql查询的时候,如果加上条件查询的时候就会出现 Unknown column 'UserName' in 'where clause'这个错,不加条件直接select * f ...
- synchronized无法禁止指令重排序的证明
package demo.reorder; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu ...
- mycat - 全局序列
解决主键冲突问题:例如id自增的order表,如果分布式情况下不处理的话,当每个表的第一条数据id都是1. 怎么确保id唯一呢? 解决办法: 1.本地文件(不推荐) 2.数据库方式(推荐) 3.时间戳 ...
- Centos6.8 安装git
1.下载安装包 wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz 2.安装依赖 sudo yum - ...