vijos1382尋找主人

2022-05-09 12:18:10 字數 892 閱讀 8319

題目大意:

給出兩個串(長度<=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 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。第一行...