BZOJ 1195 HNOI2006 最短母串

2022-04-30 10:30:07 字數 1285 閱讀 8757

time limit: 10 sec  memory limit: 32 mb

submit: 1346  solved: 450

[submit][status][discuss]

給定n個字串(s1,s2,„,sn),要求找到乙個最短的字串t,使得這n個字串(s1,s2,„,sn)都是t的子串。

第一行是乙個正整數n(n<=12),表示給定的字串的個數。以下的n行,每行有乙個全由大寫字母組成的字串。每個字串的長度不超過50.

只有一行,為找到的最短的字串t。在保證最短的前提下,如果有多個字串都滿足要求,那麼必須輸出按字典序排列的第乙個。

2 abcd

bcdabc

abcdabc

[submit][status][discuss]

不明白網上為啥題解都寫的那麼複雜,還說可以hack別人,好怕怕哦……

1 #include2

#define n 605

3#define m (1<<12)

4#define chr char

5#define sht short

6 chr s[55];7

int n,tt=1;8

sht fl[n];

9int

ed[n];

10 sht ch[n][26

];11

int q[n*m],l,r;

12sht f[n][m];

13int

p[n][m];

14sht c[n][m];

15sht stk[n],tp;

16main()

25 ed[t]|=1

<27 fl[1]=1;28

for(int i=0;i<26;++i)

29if(ch[1

][i])

30 fl[q[r++]=ch[1][i]]=1;31

else

32 ch[1][i]=1;33

while(l!=r)

42 l=r=0;q[r++]=1

<1][0]=1;43

while(l!=r)53}

54out:int id=q[r-1]>>n,bt=(1

<1;55

while(id!=1)61

while(tp)putchar('

a'+stk[tp--]);puts(""

);62 }

@author: yousiki

BZOJ 1195 HNOI2006 最短母串

一看字串就想到ac自動機是不是沒救了 然後決定在ac自動機上做分層圖最短路233333333 結果發現極限資料剛好卡時限了qaq 仔細一想好像每條邊的長度都是1哎。果斷bfs 其實dfs應該也可以的吧,而且可以剪枝。但是我有dfs恐懼症,於是果斷選擇了bfs。結果跑得奇慢無比。不談了我想靜靜 inc...

bzoj1195 HNOI2006 最短母串

此題似乎是乙個dp。dp i j 表示選了i這個集合的字串,最後乙個是j的最短字串。字典序順便搞定 然後發現需要處理掉一串為另一串子串的情況,特判一些特殊情況 或者奇怪的姿勢 就好了。這題很卡空間,請務必不要亂開陣列。include define gc getchar using namespace...

BZOJ1195 HNOI2006 最短母串

給定n個字串 s1,s2,sn 要求找到乙個最短的字串t,使得這n個字串 s1,s2,sn 都是t的子串。第一行是乙個正整數n n 12 表示給定的字串的個數。以下的n行,每行有乙個全由大寫字母組成的字串。每個字串的長度不超過50.只有一行,為找到的最短的字串t。在保證最短的前提下,如果有多個字串都...