题目描述

黑暗之主的蜈蚣几乎可以毁灭一切,因此小正方形陷入了苦战……

小正方形现在需要减弱黑暗之主的攻击。

一个黑暗之主的攻击可以用一个仅有小写字母的字符串表示。

现在黑暗之主向小正方形发动了若干攻击,对于两个攻击,小正方形能选出它们最长的公共子串,并把这一段消除。

现在小正方形想要知道,对于任意两个黑暗之主的攻击,它们的最长公共子串长度是多少,你能帮帮它吗?

题解

我是个**,字符集会随着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[52],height[N],ans[52][52],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=0;i<=m;++i)tong[i]=0;for(int i=1;i<=n;++i)tong[rnk[i]]++;for(int i=1;i<=m;++i)tong[i]+=tong[i-1];for(int i=n;i>=1;--i)sa[tong[rnk[y[i]]]--]=y[i];
}
inline void SA(){for(int i=1;i<=n;++i)rnk[i]=s[i],y[i]=i;m=200;qsort();for(int w=1,p;p<n;m=p,w<<=1){p=0;for(int i=n-w+1;i<=n;++i)y[++p]=i;for(int i=1;i<=n;++i)if(sa[i]>w)y[++p]=sa[i]-w;qsort();swap(rnk,y);rnk[sa[1]]=p=1;for(int i=2;i<=n;++i)rnk[sa[i]]=((y[sa[i-1]]==y[sa[i]])&&(y[sa[i-1]+w]==y[sa[i]+w]))?p:++p;}for(int i=1;i<=n;++i){if(rnk[i]==1)continue;int j=max(0,height[rnk[i-1]]-1);while(s[i+j]==s[sa[rnk[i]-1]+j])j++;height[rnk[i]]=j;}for(int i=1;i<=n;++i){for(int j=1;j<=tot;++j)pre[j]=min(pre[j],height[i]);pre[ji[sa[i-1]]]=max(pre[ji[sa[i-1]]],height[i]);for(int j=1;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=1;i<=tot;++i){init(i);s[++n]=i;}SA();for(int i=1;i<=tot;++i){for(int j=1;j<=tot;++j)if(i!=j)printf("%d ",ans[i][j]);puts("");}return 0;
}

转载于:https://www.cnblogs.com/ZH-comld/p/10189133.html

Annihilate(SA)相关推荐

  1. linux修改mysql密码sa_如何修改SA口令,数据库SA密码怎么改?

    [问题现象]安装数据库的时候设置过SA口令,安装后不记得了?有没有办法可以修改数据库SA口令? [原因分析]各版本数据库更改SA口令的方法不一样,一般MSDE2000数据库安装时没有SA口令,SQL ...

  2. 【JBOSS】User not found SA

    启动JBOSS 发现报User not found: SA 错误, 找了老半天才找到处理方法,异常日志如下: java.sql.SQLException: User not found: SA at ...

  3. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败...

    做机房收费系统的时候,首先在SQL server数据库中添加好charge数据库(在对象资源管理器中,右击数据库,点击附加,找到charge的mdf文件,点击确定),然后用ODBC配置好数据库,把机房 ...

  4. sql server 2008 修改sa密码

    问题: 当我们用windows本身验证之后需要修改sa密码,出现这样的错误. 解决方案: 转载于:https://www.cnblogs.com/hcfan/p/4164777.html

  5. [elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić

    上一章我们提出了一个基本版的deftraceable宏,能让我们编写可跟踪的函数.宏的最终版本有一些剩余的问题,今天我们将解决其中的一个--参数模式匹配. 今天的练习表明我们必须仔细考虑宏可能接收到的 ...

  6. EXE文件中的程序的加载过程 SA是什么呢?PSP是什么?

    精华解读:https://zhidao.baidu.com/question/195901151.html 段地址SA,默认在DS中! 查看PSP命令: -d ds:0 一般来说,PSP是256个字节 ...

  7. 恢复 Microsoft SQL Server SA 密码的三种方法

    如果您丢失了 SA 密码,您可能认为唯一的选择是重新安装 SQL Server 并重新附加所有用户数据库.只需在单用户模式下启动 SQL Server,您就可以使用 OSQL 命令轻松恢复 SA 密码 ...

  8. 一定要加强SQL数据库SA

    这里就想谈谈sa弱口令这一老问题.其实许多数据库都有这么1个超级管理员帐号,例如:Oracle是"system"和"sys",Sybase也是"sa& ...

  9. RDKit | 通过评估合成难度(SA Score)筛选化合物

    无论如何获得先导化合物,评估候选先导化合物的合成难度都很重要.无论该化合物在计算机上的应用前景如何,实际上并未对其进行合成和评估. 介绍SA score(Synthetic Accessibility ...

最新文章

  1. oracle 一致性读数量,ORACLE 一致性读原理记录
  2. java 读文件夹_java怎么读取读取文件夹下的所有文件夹和文件?
  3. SQL Server表名为添加中括号[]执行出错
  4. 20应用统计考研复试要点(part31)--简答题
  5. 东京组委会“友情提示”:奖牌是用回收金属做的不能吃!别咬了
  6. iOS——使用StroryBoard页面跳转及传值
  7. 学习笔记===《用户体验要素——以用户为中心的产品设计》
  8. bzoj 3040: 最短路(road)(堆优化dijkstra)
  9. YUY2转RGB 的各种版本
  10. 计算机一级四五章重点,《信息技术》第四章要点
  11. vb怎么调用oracle数据库连接,VB 连接Oracle数据库
  12. CDA数据分析师Level_1大纲最全解析
  13. idea中代码统计工具Statistic的配置与使用
  14. ebay 后台HTML有尺寸宽度要求吗,Ebay后台有哪些常用的操作页面?
  15. 阿里云上远程连接redis
  16. 随机森林、LGBM基于贝叶斯优化调参
  17. pdb和pdm文件有什么区别?
  18. python+selenium 拉勾网信息获取,主要是定位元素的练习
  19. 【机器学习笔记】朴素贝叶斯
  20. 音乐播放器Android开发的目的,基于Android的手机音乐播放器的设计与开发

热门文章

  1. 【复习资料】单片机与嵌入式系统原理及应用
  2. C++代码片段(四)萃取模板类的模板参数类型
  3. 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2
  4. python写的一个贴吧爬虫_Python-简单百度贴吧爬虫
  5. linux 配置文件解析,任何可以在Linux上轻松解析配置文件的工具?
  6. 面向对象的23种设计模式
  7. string常用操作
  8. 翻转字符串里面的单词(*****)
  9. c++ 迭代器支持的运算
  10. Linux基础-1.0共享文件夹创建