AC日記 接龍遊戲 codevs 1051

2022-05-14 16:24:32 字數 1355 閱讀 8234

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

給出了n個單詞,已經按長度排好了序。如果某單詞i是某單詞j的字首,i->j算一次接龍(兩個相同的單詞不能算接龍)。

你的任務是:對於輸入的單詞,找出最長的龍。

輸入描述 input description

第一行為n(1<=n<=105)。以下n行每行乙個單詞(由小寫組成),已經按長度排序。(每個單詞長度<50)

輸出描述 output description

僅乙個數,為最長的龍的長度。

樣例輸入 sample inputia

intable

inter

樣例輸出 sample output

資料範圍及提示 data size & hint

1<=n<=105

思路:用hash表把所有的單詞給存起來

然後比較的時候用hash表比較

然後線性結構比較是否為字首的複雜度為n^2

然而n<=100000

超時穩穩的

那,如何優化呢?

考慮把線性比較轉化成樹

建立乙個根節點

我們從根節點找這個單詞的字首

如果沒有這個單詞的字首

則把這個單詞作為乙個葉節點生長在根節點上

如果找到了

則跳入這個葉節點

繼續從這個葉節點找字首

直到找不到,然後把這個單詞作為乙個新的葉節點生長在當前節點上

這樣會優化很多很多

輕鬆ac

來,上**:

#include#include

#include

#include

#define mod 10000007

using

namespace

std;

struct

node ;

struct node edge[100001

];int n,len[100001],hash[100001][51],dp[100001

];int head[100001],num,ans=0

;string word[100001

];inline

void edge_add(int

from,int

to)void dfs(int now,int pos,int

be) }

}edge_add(be,pos);

}int

main()

dfs(

1,i,0

); }

cout

return0;

}

codevs 1051 接龍遊戲

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 給出了n個單詞,已經按長度排好了序。如果某單詞i是某單詞j的字首,i j算一次接龍 兩個相同的單詞不能算接龍 你的任務是 對於輸入的單詞,找出最長的龍。輸入描述 input description 第一行為n 1 n 1...

codevs 1051 接龍遊戲

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解給出了n個單詞,已經按長度排好了序。如果某單詞i是某單詞j的字首,i j算一次接龍 兩個相同的單詞不能算接龍 你的任務是 對於輸入的單詞,找出最長的龍。輸入描述 input description 第一行為n 1 n...

CODEVS 1051 接龍遊戲

題目描述 description 給出了n個單詞,已經按長度排好了序。如果某單詞i是某單詞j的字首,i j算一次接龍 兩個相同的單詞不能算接龍 你的任務是 對於輸入的單詞,找出最長的龍。輸入描述 input description 第一行為n 1 n 105 以下n行每行乙個單詞 由小寫組成 已經按...