(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...