20191112 csp s模擬T3(字串)

2021-09-29 14:04:05 字數 2883 閱讀 2682

(woj4816)

1.1 題目描述

實際上這道題與命令方塊沒有什麼關係。給定n

nn個字串s

is_i

si​,將它們按給出的順序排開。你每次可以交換任意兩個字串的位置。

通過交換,這些字串最終需要滿足如下的性質:

對於任意的i

<

j<

ki < j < k

i<

j<

k,必須有:lcp

(si,

sj)≤

lcp(

si,s

k)

lcp(s_i,s_j)\le lcp(s_i,s_k)

lcp(si

​,sj

​)≤l

cp(s

i​,s

k​)以及lcp

(sj,

sk)≤

lcp(

si,s

k)

lcp(s_j,s_k)\le lcp(s_i,s_k)

lcp(sj

​,sk

​)≤l

cp(s

i​,s

k​)。其中lcp

(s,t

)lcp(s,t)

lcp(s,

t)的定義為:字串s

ss 和t

tt 的最長公共字首的長度。如lcp

(」ab

c」,」

abd」

)=

2lcp(」abc」,」abd」) = 2

lcp(」a

bc」,

」abd

」)=2

,而l cp

(」ab

c」,」

abcd

」)=3

lcp(」abc」,」abcd」) = 3

lcp(」a

bc」,

」abc

d」)=

3。請按順序輸出你交換了哪些字串。保證存在一種方案,使得交換之後所有字串滿足上述性質。並且可以證明,在題目給定的範圍下,這樣的方案一定存在,並且你所需要的最少交換次數不會超過106

10^6

106次。

1.2 輸入描述

輸入檔名為block.in。

第一行為乙個正整數n

nn,代表字串的個數。

接下來n

nn行,每行乙個字串,代表最初的s

is_i

si​。

1.3 輸出描述

輸出檔名為block.out。

第一行為乙個正整數m

mm,代表你的交換次數。

接下來m

mm行,每行兩個正整數a,b

a,ba,

b,代表你交換的兩個字串的編號。

special judge將會按順序完成你給出的交換操作,並判定最後得到的字串序列是否合法。如果你輸出的m

mm大於106

10^6

106,或者輸出格式不正確,將被認為是答案錯誤。如果你的答案合法並且是正確的,你將會得到對應測試點的得分,反之不得分。

1.4 輸入樣例&輸出樣例

block1.in

3abcd

aabd

block1.out

11 2

另外給出了乙個附加樣例。

1.5 樣例說明

對於第乙個樣例:

交換後的字串序列為:a,a

bcd,

ab

da,abcd,abd

a,abcd

,abd

,不難發現,這是符合要求的。

對於全部的資料,n≤1

06,∑

∣si∣

≤107

n\le 10^6,\sum |s_i|\le 10^7

n≤106,

∑∣si

​∣≤1

07,字串中的所有字元均屬於小寫英文本母。

思路:發現建出字典樹後,任意一種dfs

序dfs序

dfs序

都滿足要求,不妨使它為字典序,直接sor

tsort

sort

。關於字典序符合要求的證明:

對於i

<

j

i<

j<

k,字串j

jj必定分別與字串i

ii和k

kk的相似度最高。

**:

#include

using

namespace std;

#define in read()

inline

int in

const

int a=

1e7+5;

const

int b=

1e6+5;

int n;

struct qur

}p[b]

;int ans;

vector int,

int>

> q;

signed

main()

sort

(p+1

,p+1

+n);

for(

int i=

1;i<=n;i++)}

printf

("%d\n"

,ans)

;for

(int y=q.

end(

)-q.

begin()

-1;y>=

0;y--

)printf

("%d %d\n"

,q[y]

.first,q[y]

.second)

;return0;

}

csp s模擬測試94

一場簡單題,打爆了。t1 腦抽分解質因數準備分子分母消,想了半天發現 jb 互質直接上天,果斷碼了高精滾蛋。t2 無腦手玩大樣例,突然靈光一閃想到對映到前 k 大小的區間,t3 寫完暴力準備划水,突然發現特殊性質可寫,10 分鐘拯救了 25 分。8003 24 46 7003 24 58 6503 ...

csp s模擬測試93

自閉場。t1 想到 cdq 因為複雜度少看見乙個 0 打了半年還用了 sort 直接廢掉,t2 t3 直接自閉暴力分都沒有。考場太慌了,心態不好。8002 07 34 003 12 11 0 03 11 53 8003 12 11 沒有前途就是垃圾趁早滾回實驗二安度晚年吧。cdq 不接受反駁。最簡單...

csp s模擬測試90

考場發明 spfa 祭。t1 按照題意模擬,然後我就發現我死了。一氣之下刪掉了 priority 拍了幾下發現賊jb快而且還是對的就開心地交了。t2 的差分狀態定義很棒然後就調了一場考試,t3 死亡暴力沒拿到分。100 00 38 16 100 03 11 10 0 03 15 44 20003 1...