題目大意:
給出兩個串(長度<=1e6),問是否同構,如果同構輸出最小表示。
題解:這是最小表示法模板題。在這裡好好講一下最小表示法。
首先有乙個最暴力的方法:
把所有表示搞出來排序。
時間複雜度o(n^2logn);
然後可以發現,比較兩個字串時都是從第一位向後比。
偽**:
char s[n<<1];int
mex()
}return ii:j;
}
時間複雜度o(n^2);
看起來可以再優化一下。
比如當前串是
s1s2s3s4s5s6s7s8
指標i,j分別走到s1和s5。
k=2。
這時s1s2和s5s6相同。
然後比較s3和s7。假設s3>s7,那麼i直接跳過s3到達s4。
因為如果要作開頭的話,s1不如s5,s2不如s6,s3不如s7;
公共原因:s3因此模板:
#include#include#include
using
namespace
std;
#define n 1000050
char a[2][2*n];
intlen;
int mex(int
t) }
return ii:j;
}int
main()
printf(
"yes\n");
for(int i=0;i)
printf("%c
",a[0][l1+i]);
printf("\n
");return0;
}
Vijos1382 尋找主人
new blog 標籤 最小表示法 題目傳送門 背景 有一天,袁 同學綿了一條價值連城寶石項鍊,但是,乙個嚴重的問題是,他竟然忘記了項鍊的主人是誰!在得知此事後,很多人向 同學發來了很多郵件,都說項鍊是自己的,要求他歸還 顯然其中最多只有乙個人說了真話 同學要求每個人都寫了一段關於自己項鍊的描述 項...
尋找主元素
如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...
vijos1909 noip2014 尋找道路
在有向圖 g 中,每條邊的長度均為 1,現給定起點和終點,請你在圖中找一條從起點到 終點的路徑,該路徑滿足以下條件 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。在滿足條件 1 的情況下使路徑最短。注意 圖 g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。第一行...