Luogu P3975 [TJOI2015]弦论

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

题目大意:

  • 重复子串不算的第\(k\)大子串

  • 重复子串计入的第\(k\)大子串

写法:后缀自动机。

\(OI\) \(Wiki\)上介绍的写法不太一样,因为要同时解决两个问题。

把字符串每个前缀所在等价类的\(siz\)记为\(1\),然后在\(parent\) \(tree\)上跑一次统计,就可以求出来每一个等价类在串中出现的次数。这里采用类似后缀排序的方法,对字符串按\(len\)为关键字进行排序。至于经过每个点的路径数\(sum\),可以在\(Trie\)边上对后面节点的\(sum\)(=每一个等价类在串中出现次数)求和得到(初始值等于\(siz\),因为每个点还有不选的情况)。

不要忘了把\(siz[1]\)\(sum[1]\)清空!

#include <bits/stdc++.h>
using namespace std;const int N = 1100010;char s[N];
int las = 1, node = 1;
int fa[N], len[N], siz[N], ch[N][26];void extend (int c) {register int p, q, x, y;p = las, q = ++node; las = q;len[q] = len[p] + 1; siz[q] = 1;while (p != 0 && ch[p][c] == 0) {ch[p][c] = q;p = fa[p];}if (p == 0) {fa[q] = 1;} else {x = ch[p][c];if (len[x] == len[p] + 1) {fa[q] = x;} else {y = ++node;fa[y] = fa[x];fa[x] = fa[q] = y;len[y] = len[p] + 1;memcpy (ch[y], ch[x], sizeof (ch[x]));while (p != 0 && ch[p][c] == x) {ch[p][c] = y;p = fa[p];}}}
}int t, k, nd[N], bin[N]; long long sum[N];void output (int u) {if (k <= siz[u]) return;k -= siz[u];register int i;for (i = 0; i < 26; ++i) {if (ch[u][i]) {if (k > sum[ch[u][i]]) {k -= sum[ch[u][i]];} else {printf ("%c", i + 'a');output (ch[u][i]);return;}}}
}int main () {scanf ("%s %d %d", s, &t, &k);register int i, j, n;n = strlen (s);for (i = 0; i < n; ++i) extend (s[i] - 'a');for (i = 1; i <= node; ++i) bin[len[i]]++;for (i = 1; i <= node; ++i) bin[i] += bin[i - 1];for (i = 1; i <= node; ++i) nd[bin[len[i]]--] = i;for (i = node; i >= 1; --i) siz[fa[nd[i]]] += siz[nd[i]];for (i = 1; i <= node; ++i) t == 0 ? (sum[i] = siz[i] = 1) : (sum[i] = siz[i]);siz[1] = sum[1] = 0;for (i = node; i >= 1; --i) {for (j = 0; j < 26; ++j) {if (ch[nd[i]][j]) {sum[nd[i]] += sum[ch[nd[i]][j]];}}}if (sum[1] < k) {puts ("-1");} else {output (1);}
}

\(p.s\)关于后缀数组求第一问的方法:

枚举每一个后缀,第i个后缀对答案的贡献为\(len−sa[i]+1−height[i]\)

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

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

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

相关文章

《 图解 HTTP 》读书笔记

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. TCP/IP 协议族按层次分为&#xff1a;应用层、传输层、网络层、数据链路层。 2. IP 协议的作用是把各种数据包传送给对方。 3. IP …

身体出现危险时会发出信号 这太重要了 一定收藏 !(组图)

太重要了&#xff01;真的太重要了&#xff01; 心脏有问题时———左边手臂会酸、麻、痛。 肝脏有问题时———小腿晚上睡觉时容易抽筋。 肾脏出现问题时———声音就会出不来&#xff0c;就会沙哑。 脾胃出现问题时———偏头痛。 任何试图更改生物钟的行为&#xff0c;都将给…

数据结构与算法-概念

计算机从解决数值计算问题到解决生活中的问题 现实生活中的问题涉及不同个体间的复杂联系 需要在计算机程序中描述生活中个体间的联系数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系而不是研究复杂的算法 数据结构 基本概念 数据&#xff1a;程序的操作对象…

腾讯联手联通推出车联网“网卡”,打“内容”+“流量”的组合拳

车载生态已经成为了一个兵家必争之地了&#xff0c;于商业前景而言&#xff0c;这是一个BAT都无法忽视的掘金胜地。 从市场数据来看&#xff0c;全球车联网市场年复合增长率达到25%&#xff0c;根据汽车之家大数据显示&#xff1a;自2014年以来&#xff0c;车联网上市新车型渗…

编程面试中的十个常见错误

本文由 伯乐在线 - darkinlight 翻译自 thegeekstuff。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。 身为程序员&#xff0c;你肯定知道和其他技术工作面试比起来&#xff0c;编程工作的面试流程略有不同。 这篇文章会就你在编程面试中应当避免的10个问题展开讨…

费曼技巧与博客

费曼技巧与博客 什么是费曼技巧&#xff1f; 费曼技巧是一种学习方法&#xff0c;核心是以教促学。 具体实践 以学习费曼技巧为例&#xff1a; 确定学习目标为学习费曼技巧。寻找资料&#xff08;网络、书籍、报刊等&#xff09;学习费曼技巧&#xff0c;直到自己认为已经理解了…

阿里云服务器 CentOS 7上-- Docker 安装 网关(API-Getway)--KONG

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 全程操作按官方文档来就可以了。 1.将 Kong 连接到 Cassandra 或 PostgreSQL 容器 Kong支持 2 种数据库&#xff1a;Cassandra 或 Post…

每个程序员都应该了解的内存知识

英文原文&#xff1a;lwn.net&#xff0c;翻译&#xff1a;开源中国 [编辑的话: Ulrich Drepper最近问我们&#xff0c;是不是有兴趣发表一篇他写的内存方面的长文。我们不用看太多就已经知道&#xff0c;LWN的读者们会喜欢这篇文章的。内存的使用常常是软件性能的决定性因子&…

山区建小学

题目描述 政府在某山区修建了一条道路&#xff0c;恰好穿越总共nn个村庄的每个村庄一次&#xff0c;没有回路或交叉&#xff0c;任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为d_idi​&#xff08;为正整数&#xff09;&#xff0c;其中&#xff0c;0<…

idea debugger console 不见了--还原 console 图标

1 找了好久&#xff0c;也找不到&#xff0c;调试的时候挺麻烦的。 2 最后发现 有个一个重置&#xff0c;视图的按钮。点击一下就恢复 。 如下图。转自&#xff1a;https://blog.csdn.net/changdejie/article/details/64127026

实验五:任意输入10个int类型数据,排序输出,再找出素数

import java.util.Scanner; public class Pxsushu {public static void main(String[] args) {// TODO Auto-generated method stubScanner s new Scanner(System.in);int temp;//对数组事先声明并创建10个空间int[] a new int[10];//把输入的数存储为数组for (int i 0; i &…

Vue笔记(六)——Vue组件通信Vuex

组件通信 vue本身的组件通信 父>子&#xff1a;父组件向子组件传参或者调用子组件的方法子>父&#xff1a;子组件向父组件传参或者调用父组件的方法兄弟之间&#xff1a;兄弟组件之间传参或者调用方法父子通信 传参 - props思路&#xff1a;定义子组件的属性&#xff08;…

灼灼夏日 - 遥思故乡 - 赤子无相忘

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 偶然翻看旧照片&#xff0c; 想起没有带过来的一本本诗集、散文集、手抄本、画册 ... 想起母亲的寄挂 ... 想起父亲的沉默 ... 想起少…

钱生钱最好的办法是什么?

当你养成理财的六种好习惯时&#xff0c;你能钱生钱了。这六种习惯是&#xff1a; 习惯一&#xff1a;记录财务情况。能够衡量就必然能够了解&#xff0c;能够了解就必然能够改变。如果没有持续的、有条理的、准确的记录&#xff0c;理财计划是不可能实现的。因此&#xff0c;在…

grid - 隐式命名网格线名称

1.隐式的指定网格线反向指定了隐式的网格区域名称&#xff0c;命名的网格区域隐式的命名了网格线名称. 指定网格区域会给网格区域边线添加隐式的网格线名称。这些网格线的命名是基于网格区域来命名&#xff0c;只是在网格区域名称的后面添加后缀-start或-end. 1 <view class…

前端笔试题小结(一)

前端笔试题小结&#xff08;一&#xff09; 2020-03-13 题目一&#xff1a; 将一个js数组去重。 样例&#xff1a; 输入&#xff1a;[ 1, “apple”, 3, “a”, 3, 1, 5, 6, “a”, 4 ] 输出&#xff1a;[ 1, “apple”, 3, “a”, 5, 6, 4 ] 分析1&#xff1a; 将两个数组循…

2019-3-1

伪静态: .html url(^page/(?P<id>\d).html/$,views.page,namepages) /page/1|2|3.html/ | {% url pages 1|2|3 %} 3.request对象 --method,GET,POST --FILES,META,body,path,get_full_path(),is_ajax(),COOKIE,session 4.CBV处理请求的另外一种方式 from django.…

java 使用 new Date() 和 System.currentTimeMillis() 获取当前 时间戳

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在开发过程中&#xff0c;通常很多人都习惯使用new Date()来获取当前时间。 使用起来也比较方便&#xff0c;同时还可以获取与当前时间…

持币过节也能让钱生钱

今天是国庆长假前最后一个交易日。从盘面上看&#xff0c;投资者包括部分基金公司减仓明显。对于目前大盘高位震荡&#xff0c;很多人选择落袋为安&#xff0c;持币过节&#xff0c;不失为明智之举。但你知道吗&#xff0c;持币过节也能让钱生钱。今天我就来为各位讲讲其中的奥…

关于cat命令修改文件内容(导入变量符号以及变量内容)

关于cat命令修改文件内容&#xff08;导入变量符号以及变量内容&#xff09; cat >1.txt<<END $11 $22 $1 $2 END 查看文件内容为&#xff1a; [rootserver04 ~]# cat 1.txt 1 2[rootserver04 ~]# 说明导入的$1,$2自动被解析了。但是当我们想输入一些变量而不被解析…