bzoj1031题解
2024-09-02 15:33:07
【解题思路】
将原串复制一份拼接到原串后作为处理串,可以对处理串的前一半后缀排序,即可得出顺序。复杂度O(Llog2L)。
【参考代码】
也是naive的时候写的。。后缀数组居然是用桶排求的。。
#pragma optimize(2)
#include <cstdio>
#include <cstring>
#include <vector>
#define REP(I,start,end) for(int I=(start);I<=(end);I++)
#define PER(I,start,end) for(int I=(start);I>=(end);I--)
using namespace std;
typedef vector<int> vecint;
vecint srt[];
int suffix[],rank[],srnk[];
char st[];
int main()
{
scanf("%s",st);
int n=strlen(st);
memset(srt,,sizeof(srt));
REP(i,,n)
srt[st[i-]].push_back(i);
int cnt=,tot=;
REP(i,,)
if(!srt[i].empty())
{
cnt++;
for(vecint::iterator it=srt[i].begin();it!=srt[i].end();it++)
{
int now=*it;
suffix[++tot]=now;
rank[now]=cnt;
}
}
for(int i=;i<n;i<<=)
{
memset(srt,,sizeof(srt));
REP(j,,n)
{
int now=i+j;
now-=(now>n)*n;
srt[rank[now]].push_back(j);
}
tot=cnt=;
REP(j,,n)
if(!srt[j].empty())
{
cnt++;
for(vecint::iterator it=srt[j].begin();it!=srt[j].end();it++)
{
int now=*it;
suffix[++tot]=now;
srnk[now]=cnt;
}
}
memset(srt,,sizeof(srt));
REP(j,,n)
srt[rank[suffix[j]]].push_back(suffix[j]);
cnt=tot=;
REP(j,,n)
if(!srt[j].empty())
{
int last=-;
for(vecint::iterator it=srt[j].begin();it!=srt[j].end();it++)
{
int now=*it,pnt=srnk[now];
cnt+=pnt>last;
last=pnt;
suffix[++tot]=now;
rank[now]=cnt;
}
}
}
REP(i,,n)
putchar(st[(suffix[i]+n-)%n]);
putchar('\n');
return ;
}
最新文章
- 利用Python进行数据分析(2) 尝试处理一份JSON数据并生成条形图
- iOS 3DES加密解密(一行代码搞定)
- 全球最受欢迎的十大Linux发行版(图)
- [转]Oracle开发专题之:%TYPE 和 %ROWTYPE
- PHP获取IP所在地区(转)
- JDBC——事物管理
- bzoj有趣的题目
- Android WifiDisplay分析一:相关Service的启动
- Java经典编程题50道之十四
- Centos扩容swap分区
- STM32库函数void USART_SendData的缺陷和解决方法
- Auto Layout - BNR
- 关于查询中查询无果,也不报错,inpout标签中的value属性为‘ ’的判断问题
- 41_redux_counter应用_react-redux版本
- 【Spark工作原理】stage划分原理理解
- Java -- JDBC 学习--通过 ResultSet 执行查询操作
- Linux下编译安装Lnmp
- 【LOJ】#2270. 「SDOI2017」天才黑客
- 原生javascript封装的函数
- centos7 在docker swarm中运行Jenkins,利用gitlab的webhook触发自动部署脚本
热门文章
- logo的普遍写法
- Nginx配置PHP环境支持
- 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式
- 【NOI2019模拟2019.6.29】组合数(Lucas定理、数位dp)
- Andrdoid中对应用程序的行为拦截实现方式之----从底层C进行拦截
- 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码扩展)
- 1060 Are They Equal (25 分)
- Lucene字段
- NIO 源码分析(02-1) BIO 源码分析
- JHipster研究