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.pswp.cn/news/449301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449301.shtml
英文地址,請注明出處:http://en.pswp.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自動被解析了。但是當我們想輸入一些變量而不被解析…