日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通(1220:单词接龙)

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(1220:单词接龙) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1220:單詞接龍


時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 5368 ??? 通過數: 3159

【題目描述】

單詞接龍是一個與我們經常玩的成語接龍相類似的游戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能存在包含關系,例如at和atide間不能相連。

【輸入】

輸入的第一行為一個單獨的整數n(n<=20)表示單詞數,以下n行每行有一個單詞(只含有大寫或小寫字母,長度不超過20),輸入的最后一行為一個單個字符,表示“龍”開頭的字母。你可以假定以此字母開頭的“龍”一定存在。

【輸出】

只需輸出以此字母開頭的最長的“龍”的長度。

【輸入樣例】

5 at touch cheat choose tact a

【輸出樣例】

23

【分析】

? ? ? ? 以樣例數據為例,構造兩兩單詞接龍重疊字符矩陣,再根據該矩陣構造遞歸解答樹,如下圖

? ? ? ? at 可以和 touch 或 tact 相連,長度分為6 或 5,而 touch 則可以和 cheat 或 choose 進行相連,長度為9 或 10,...

? ? ? ? 以此類推,最長的龍為:atoucheatactactouchoose。注意:每個單詞都最多在“龍”中出現兩次。

? ? ? ? 這道題用C++代碼要簡單一些,有關字符串的代碼,用C語言非常困難。

感謝題解:https://www.cnblogs.com/-xiangyang/p/9220236.html

【參考代碼】

#include<bits/stdc++.h> using namespace std; const int MAXN=50; string str[MAXN]; int n,used[MAXN]; int ans=0; int check(string a,string b)//查找想同的部分長度 {int la=a.size(),lb=b.size();int l=min(la,lb);for(int i=1;i<l;i++) {int flag = 1;for (int j = 0; j < i; j++){if(a[la-i+j]!=b[j])flag=0;}if(flag) return i;}return 0; } void dfs(string s,int len) {ans=max(ans,len);for(int i=0;i<n;i++){if(used[i]>=2) continue;int c=check(s,str[i]);if(c>0) {used[i]++;dfs(str[i],len+str[i].size()-c);used[i]--;}}} int main() {cin>>n;getchar();for(int i=0;i<n;i++) {cin>>str[i];getchar();used[i]=0;}string s;cin>>s;dfs(' '+s,1);cout<<ans<<endl;return 0; }

http://ybt.ssoier.cn:8088/problem_show.php?pid=1220

?

總結

以上是生活随笔為你收集整理的信息学奥赛一本通(1220:单词接龙)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。