Luogu P2463 [SDOI2008]Sandy的卡片

題目鏈接 \(Click\) \(Here\)

真的好麻煩啊。。事實證明,理解是理解,一定要認認真真把板子打牢,不然調鍋的時候真的會很痛苦。。(最好是八分鐘能無腦把\(SA\)碼對的程度\(QAQ\)

這個題最開始我想的是\(RMQ\)遍歷每一個子區間,但是意識到復雜度是\(O(N^2)\)然后就\(GG\)了。怎么說呢,后綴數組和二分似乎是很常見的組合(和莫隊也是?),這個題只需要在\(height\)數組里二分\(lcp\)長度即可,\(check\)函數里面處理一下,要讓區間內所有原串都有至少一個子串。

#include <bits/stdc++.h>
using namespace std;const int N = 200010;int s[N], id[N];
int n, m, num, len, tot = 10000;
int sa[N], tp[N], rk[N], _rk[N], bin[N], height[N];void get_height (int n) {int k = 0;for (int i = 1; i <= n; ++i) {if (k != 0) k--;int j = sa[rk[i] - 1];while (s[i + k] == s[j + k]) k++;height[rk[i]] = k;}
}void base_sort (int n, int m) {for (int i = 0; i <= m; ++i) bin[i] = 0;for (int i = 1; i <= n; ++i) bin[rk[tp[i]]]++;for (int i = 1; i <= m; ++i) bin[i] += bin[i - 1];for (int i = n; i >= 1; --i) sa[bin[rk[tp[i]]]--] = tp[i];
}void suffix_sort (int n, int m) {for (int i = 1; i <= n; ++i) {rk[i] = s[i];tp[i] = i;}base_sort (n, m);for (int w = 1; w <= n; w <<= 1) {int cnt = 0;for (int i = n - w + 1; i <= n; ++i) {tp[++cnt] = i;}for (int i = 1; i <= n; ++i) {if (sa[i] > w) {tp[++cnt] = sa[i] - w;}}base_sort (n, m);memcpy (_rk, rk, sizeof (rk));rk[sa[1]] = cnt = 1;for (int i = 2; i <= n; ++i) {rk[sa[i]] = _rk[sa[i]] == _rk[sa[i - 1]] && _rk[sa[i] + w] == _rk[sa[i - 1] + w] ? cnt : ++cnt;}if (cnt == n) break;m = cnt;}
}bool vis[1010]; int sta[N], top = 0;bool can_use (int l) {while (top) vis[sta[top--]] = false;for (int i = 1; i <= len; ++i) {if (height[i] < l) {while (top) vis[sta[top--]] = false;}if (!vis[id[sa[i]]]) {vis[id[sa[i]]] = true;sta[++top] = id[sa[i]];if (top == n) return true;}}return false;
}int main () {cin >> n;int ban = 2000;for (int i = 1; i <= n; ++i) {cin >> m;for (int j = 1; j <= m; ++j) {cin >> s[++len]; //把所有的字符串整合到一個里id[len] = i; // 表明主權(len號后綴(的lcp)屬于串i)}s[++len] = ++ban; //隔開}for (int i = len; i >= 1; --i) {s[i] = s[i] - s[i - 1] + 4000;}suffix_sort (len, 10000);get_height (len);int l = 0, r = len;while (l < r) {int mid = (l + r + 1) >> 1;if (can_use (mid)) {l = mid;} else {r = mid - 1;}}cout << l + 1 << endl;
}

轉載于:https://www.cnblogs.com/maomao9173/p/10438209.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536887.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java log輸出到文件路徑_Java - 配置log4j的日志文件路徑 (附-獲取當前類路徑的多種方法)...

1 日志路徑帶來的痛點Java 項目中少不了要和log4j等日志框架打交道, 開發環境和生產環境下日志文件的輸出路徑總是不一致, 設置為絕對路徑的方式缺少了靈活性, 每次變更項目路徑都要修改文件, 目前想到的最佳實現方式是: 根據項目位置自動加載并配置文件路徑.本文借鑒 Tomcat 的…

常用數據結構

字典&#xff1a;即map&#xff0c;映射&#xff0c;通過key>value的方式直接查找與之對應的值&#xff0c;實現一般是hash表或二叉樹跳躍表&#xff1a;本質是鏈表&#xff0c;只不過將數據進行提取分層&#xff0c;將總數據置為底層&#xff0c;提取2、4、的倍數為第一二層…

java jasypt_Jasypt

軟件簡介Jasypt這個Java類包為開發人員提供一種簡單的方式來為項目增加加密功能&#xff0c;包括&#xff1a;密碼Digest認證&#xff0c;文本和對象加密&#xff0c;集成hibernate&#xff0c;SpringSecurity(Acegi)來增強密碼管理。Jasypt開發團隊推出了Java加密工具Jasypt 1…

ZABBIX監控JAVA日志文件

最近開發人員有一個需求&#xff0c;監控java程序的報錯日志&#xff0c;如日志中包含“ERROR”關鍵字的信息&#xff0c;就郵件告警&#xff0c;以下是具體實現方法。 一、創建模板以上是已經創建好的模板&#xff0c;名為“Template App Java logs”創建應用集二、創建監控項…

如何快速把音樂轉成MP3格式

身邊有這樣一群朋友經常搞音樂&#xff0c;仿佛生活的樂趣只有音樂&#xff0c;不能也能理解&#xff0c;誰沒有點自己的愛好呢&#xff1f;但是如果想要在茫茫人海中成為佼佼者&#xff0c;并不是這么容易的&#xff0c;但是我們要在速度上贏更多的人&#xff0c;所以寫了這篇…

new URI(zk_servers_1) 路徑包含下劃線無法獲取host的問題

spring cloud gateway使用zookeeper作為注冊中心調用其它服務的時候報了下面這個錯誤&#xff1a; ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范圍_JAVAEE之內置對象和屬性范圍

內置對象和屬性范圍四種屬性范圍九個內置對象1.內置對象如果說想要使用一個對象&#xff0c;必須new 出來&#xff0c;但是在我們的jsp操作中&#xff0c;發現我們使用過的out,request對象沒有進行實例化&#xff0c;類似于這樣的對象&#xff0c;我們叫做jsp的內置對象&#x…

JavaWeb學習筆記(九)--HttpServletResponse

web服務器接收到客戶端的HTTP請求&#xff0c;會針對每一次請求&#xff0c;分別創建一個用于代表請求的request對象和代表響應的response對象。 request和response對象既然代表請求和響應&#xff0c;那我們要獲取客戶端提交過來的數據&#xff0c;只需要找request對象即可。要…

java html5 上傳_HTML5結合ajax實現文件上傳以及進度顯示

基于原生html5實現&#xff0c;不需要falsh支持&#xff0c;進度可以自定義顯示&#xff0c;控制靈活&#xff0c; 本來打算使用jquery插件進行異步文件上傳&#xff0c;比如uploadfy但是需要額外的支持&#xff0c;也有人用iframe模仿異步上傳機制&#xff0c;感覺都比較別扭。…

7天玩轉機器學習

7天玩轉機器學習 人工智能時代&#xff0c;數據迎來大爆發&#xff0c;數據對于提升業務價值的重要性與日俱增。但面對海量數據&#xff0c;傳統分析方法已經顯得無能為力&#xff0c;而機器學習的成熟為企業帶來了強大的分析引擎&#xff0c;可在眾多領域幫助企業挖掘數據價值…

centos 6.5 yum java_Centos6.5 yum 安裝jdk1.8

centos 6.5 安裝卸載jdk-- 查看有沒有預裝jdk版本java -version-- 查看已安裝的版本rpm -qa|grep java-- 卸載預裝版本 rpm -e --nodeps 命令卸載rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安裝的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//篩選符合條件的記錄Aggregation…

一次面試總結(記錄)

1,從一個數組里找重復出現次數最多的一個數&#xff1f;2,常用的linux命令3.垃圾收集器有哪些 &#xff1f;垃圾收集算法&#xff1f;4,線上服務器變慢了你是如何定位問題并處理的&#xff1f;5,你自己實現一個本地緩存,淘汰最久未使用,你怎么設計6,用棧實現計算器7,剔除二叉樹…

java 累加 0-9 a-z_JAVA獲得包含0-9、a-z、A-Z范圍內字符串的的隨機數實例

一、獲得0-9,a-z,a-z范圍的隨機字符串/*** java獲得0-9,a-z,a-z范圍的隨機數* param length 隨機數長度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 擴展開發】Zephir 基礎篇

上一篇 《Zephir 簡介》 簡單介紹了環境搭建&#xff0c;編寫了一個的簡單示例。這一篇繼續介紹 Zephir 基礎。 基本語法Zephir 中&#xff0c;每個文件都必須有且只有一個類&#xff0c;每個類都必須有一個命名空間&#xff0c;目錄結構必須與所使用的類和命名空間的名稱相匹配…

java常見排序算法有哪些_Java中常用的6種排序算法詳細分解

排序算法很多地方都會用到&#xff0c;近期又重新看了一遍算法&#xff0c;并自己簡單地實現了一遍&#xff0c;特此記錄下來&#xff0c;為以后復習留點材料。廢話不多說&#xff0c;下面逐一看看經典的排序算法&#xff1a;1. 選擇排序選擇排序的基本思想是遍歷數組的過程中&…

python range函數

這個函數很簡單&#xff0c;就不寫例子了&#xff0c;看看語法&#xff0c;拿來即用 python range() 函數可創建一個整數列表&#xff0c;一般用在 for 循環中。 函數語法 range(start, stop[, step]) 參數說明&#xff1a; start: 計數從 start 開始。默認是從 0 開始。例如ra…

java tomcat重啟linux_Linux下tomcat重啟

進入Tomcat下的bin目錄cd/user/local/tomcat/bin關閉tomcat./shutdown.sh查看tomcat是否關閉ps -ef|grep java顯示以下信息&#xff0c;則Tomcat還未關閉root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file/usr/loca…

左偏樹 P3377【模板】左偏樹(可并堆)

題目傳送門 代碼&#xff1a; /* code by: zstu wxk time: 2019/03/01 */ #include<bits/stdc.h> using namespace std; #define Fopen freopen("testdata.in","r",stdin); freopen("_out.txt","w",stdout); #define LL long lo…

lock 線程 java_JAVA多線程-基礎Lock Condition 并發集合

跟上一篇文章比較,這次改進了之前的代碼,使用了Lock Condition 和并發集合.代碼量減了一些,并且更加容易讀了.這篇代碼是上一篇的改進版,邏輯在前篇有說明,以防大家看不到,我再重現貼一遍.后續會使用高階的線程工具再次改進,以求代碼更簡單.代碼的邏輯:1)SProducer不停的產生nu…