P1019 單詞接龍

2021-09-26 15:15:39 字數 1395 閱讀 8979

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」**現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beastbeastbeast和astonishastonishastonish,如果接成一條龍則變為beastonishbeastonishbeastonish,另外相鄰的兩部分不能存在包含關係,例如atatat 和 atideatideatide 間不能相連。

輸入的第一行為乙個單獨的整數nnn (n≤20n \le 20n≤20)表示單詞數,以下nnn 行每行有乙個單詞,輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。你可以假定以此字母開頭的「龍」一定存在.

只需輸出以此字母開頭的最長的「龍」的長度

輸入 #1

5

attouch

cheat

choose

tact

a

輸出 #1

23
(連成的「龍」為atoucheatactactouchoose)

noip2000提高組第三題

題目大意:讀題吧。

解題思路:需要預處理出每兩個串之間字首和字尾的公共長度是多少,然後從龍的第乙個字母開始搜就可以了。

/*

@author: top_spirit

@language: c++

*/#include using namespace std ;

typedef unsigned long long ull ;

typedef long long ll ;

const int maxn = 50;

const int inf = 0x3f3f3f3f ;

const ull seed = 133 ;

const double pi = acos(-1.0) ;

int con[maxn][maxn] ;

int vis[maxn], ans, n ;

string s[maxn] ,op ;

int check(int x, int y)

i++ ;

j++ ;

}if (flag) return k;

}return 0 ;

}void init()

}}void dfs(int index, int len)

}int main ()

}cout << ans << endl ;

return 0;

}

P1019 單詞接龍

洛谷 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部...

P1019 單詞接龍

p1019 單詞接龍 首先需要找到任意兩個單詞的最小重合長度 從前面單詞的尾部比較,依次增加尾部選取長度,直至找到選取尾部和下乙個單詞頭部相同,就找到了最小重合長度。再通過dfs搜尋。includeusing namespace std int n,sum 0 char str 20 50 ch s...

P1019 單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成一條龍則變為beastonish...