[TJOI2015]弦论 - 洛谷

感觉位置不同算相同还是比较好想的,我们top排序后算每个点后面连接了多少点就知道里面有多少字串了,然后求k大就行了;

考了位置不同算不同的话,我们就要考虑endpos了。那么具体体现在SAM上,就是后缀链接。如果有链接,就说明出现过相同后缀,我们才把他们连接在一起对吧;不然后缀链接就会接在根节点,这是性质。那么我们初始值就不设为1,在后缀链接上一样跑一次求和,就把位置不同的也考虑上了。

那么最后求k小还有一点,就是假如k小于后缀链接上的和,就说明这里的点不需要考虑,因为前面已经出现过了。

/*keep on going and never give up*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define db(x) cerr<<(#x)<<" "<<(x)<<" "<<endl;
#define endl "\n"
#define fast std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int maxn=2e6+10;
struct node{int ch[26];int len,fa;node(){memset(ch,0,sizeof(ch));len=fa=0;}
}tre[maxn];int cnt=1,las=1;
int a[maxn],id[maxn],sz[maxn],sum[maxn];
void ex_sam(int c){int p=las,np=las=++cnt;sz[np]=1;tre[np].len=tre[p].len+1;for(;p&&!tre[p].ch[c];p=tre[p].fa)tre[p].ch[c]=np;if(p==0)tre[np].fa=1; else{int q=tre[p].ch[c];if(tre[q].len==tre[p].len+1)tre[np].fa=q; else{int nq=++cnt;tre[nq]=tre[q];tre[nq].len=tre[p].len+1;tre[q].fa=tre[np].fa=nq;for(;p&&tre[p].ch[c]==q;p=tre[p].fa)tre[p].ch[c]=nq;}}
}int op,k;
void tops(){for(int i=1;i<=cnt;i++) a[tre[i].len]++;for(int i=1;i<=cnt;i++) a[i]+=a[i-1];for(int i=1;i<=cnt;i++) id[a[tre[i].len]--]=i;//对每一个长度给个id for(int i=cnt;i>=1;i--) sz[tre[id[i]].fa]+=sz[id[i]];for(int i=1;i<=cnt;i++) op==0?(sum[i]=sz[i]=1):(sum[i]=sz[i]);sz[1]=sum[1]=0;for(int i=cnt;i>=1;i--){for(int j=0;j<26;j++){int v=tre[id[i]].ch[j];if(!v)continue;sum[id[i]]+=sum[v];}}
}
void query(int k){int x=1;while (k){if(k<=sz[x]) break;k-=sz[x];for (int i=0;i<26;i++){if (tre[x].ch[i]){if (sum[tre[x].ch[i]]>=k){putchar('a'+i);x=tre[x].ch[i];break;}else k-=sum[tre[x].ch[i]];}}}
}
string s;
signed main(){fastcin>>s;for(auto c:s) ex_sam(c-'a');cin>>op>>k;tops();
//  cout<<sum[1]<<endl;if(sum[1]<k) cout<<-1;elsequery(k);
}

P3975 [TJOI2015]弦论 (SAM)相关推荐

  1. luogu P3975 [TJOI2015]弦论 SAM

    luogu P3975 [TJOI2015]弦论 链接 bzoj 思路 建出sam. 子串算多个的,统计preant tree的子树大小,否则就是大小为1 然后再统计sam的节点能走到多少串. 然后就 ...

  2. 洛谷 P3975 [TJOI2015]弦论 解题报告

    P3975 [TJOI2015]弦论 题目描述 为了提高智商,ZJY开始学习弦论.这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为\(n\)的字符串,求 ...

  3. 洛谷 [P3975 [TJOI2015]弦论

    洛谷 P3975 [TJOI2015]弦论 题目描述 给定一个长度为 nnn 的字符串,求它的第 kkk 小字串:给定 ttt, ttt 为 000 则表示不同位置的相同子串算作一个,ttt 为 11 ...

  4. 【后缀自动机】Luogu P3975 [TJOI2015]弦论题解

    [TJOI2015]弦论 题目描述 为了提高智商,ZJY 开始学习弦论.这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 nnn 的字符串,求出它的第 ...

  5. 洛谷P3975 - [TJOI2015]弦论

    Portal Description 给出一个小写字母串\(s(|s|\leq5\times10^5),t\in\{0,1\},k(k\leq10^9)\),求\(s\)的第\(k\)小子串.\(t= ...

  6. [SAM模板题] P3975 [TJOI2015] 弦论

    题目思路 对原串建立SAMSAMSAM,然后分情况考虑: t=0t = 0t=0,代表本质不同即为不同,那么我们需要对每个SAMSAMSAM节点uuu维护uuu能够到达的点的数量,即为经过uuu的本质 ...

  7. P3975 [TJOI2015]弦论 - 后缀自动机(SAM)

    这是一道板子题的改编,意在加深对求第k小子串的理解.首先先看一下最简单的SAM板子.相信应该都写过了才会写这题 // // Created by acer on 2021/2/16. // //判断子 ...

  8. P3975 [TJOI2015]弦论 第K小子串

    题目描述 https://www.luogu.org/problem/P3975 为了提高智商,ZJY开始学习弦论.这一天,她在< String theory>中看到了这样一道问题:对于一 ...

  9. [Luogu P3975] [TJOI2015]弦论

    洛谷传送门 BZOJ传送门 题目描述 为了提高智商,ZJY开始学习弦论.这一天,她在< String theory>中看到了这样一道问题:对于一个给定的长度为nnn的字符串,求出它的第k& ...

最新文章

  1. css超出一行添加省略号属性
  2. 用WORD2010写博客,并发送至博客园
  3. Spring MVC-10循序渐进之文件下载
  4. Nodejs简介以及Windows上安装Nodejs
  5. yum更新php版本,CentOS 5.4 通过yum升级PHP到5.3版本的两种方法
  6. spring-data-jpa Specification构建动态ql
  7. 字符识别(模板匹配BP神经网络训练)
  8. php数组转化js数组格式化,php数组转换成js数组
  9. 【flink】Flink 1.12.2 源码浅析 : Task数据输入
  10. python中for in循环结束才能执行后面的语句吗,python中for-in循环、while循环、if语句、input()函数、流程控制语句break和continue...
  11. 如何为开源项目做市场
  12. 一、网络知识 1.计算机网络原理
  13. Pr导入ass字幕的解决方案——将ass字幕转为mov视频格式
  14. 计算机dll修复工具,DLL修复工具哪个好?五款修复能力强推荐
  15. python excel写入日期变数字_RPA-使用Python读取Excel日期结果为数字时的转换处理方法...
  16. 安卓开发自学教程,Android研发岗必问30+道高级面试题
  17. Nessus之——Nessus的整理
  18. 【Java】若依前后端分离,分页数据为null报错
  19. 【STM32】中断和中断优先级理解
  20. Android--打造流行的无数据空布局页面

热门文章

  1. STM32工程文件结构详解
  2. JAVA正反合——原码、补码与反码学习笔记’
  3. 如何将自己做的网页发布到网站让别人可以看到
  4. PrintStream和System.setOut(PrintStream ps)用法
  5. 【智能优化算法】基于分段权重和变异反向学习的蝴蝶优化算法求解单目标优化问题附matlab代码
  6. HeadFist里面的工厂方法模式读书笔记
  7. 亚马逊广告接口 amazon advertising
  8. SMAA算法详解 - SearchTex
  9. 全球与中国网络连接视频门铃对讲机系统市场深度研究分析报告势
  10. 画出计算机硬件系统结构图,一、计算机的硬件结构.ppt