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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

单词接龙(信息学奥赛一本通-T1220)

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

【題目描述】

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

【輸入】

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

【輸出】

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

【輸入樣例】

5
at
touch
cheat
choose
tact
a

【輸出樣例】

23

【源程序】

# include<iostream> # include<cstdio> # include<string> using namespace std; int n; string str[30]; int len_str,sum=0; int times[30]={0};void dfs(int x) { int i,j; int p,q; int num;int work; for(i=1;i<str[x].length();i++) { num=0; for(j=1;j<=n;j++) { if(times[j]<2){ if(str[x][i]==str[j][0]){ p=i,q=0,work=0; while(p<=str[x].length()-1){ if(str[x][p]!=str[j][q]){ num++;work++; break;} p++; q++; } if(!work&&q!=str[j].length()){ len_str+=str[j].length()-q;times[j]++;dfs(j);len_str-=str[j].length()-q;times[j]--;} } else num++;} else num++;} if(num==n&&i==str[x].length()-1){ if(sum<len_str) sum=len_str;return; } } } int main() { int i; cin>>n;for(i=1;i<=n+1;i++) cin>>str[i];for(i=1;i<=n;i++)if(str[i][0]==str[n+1][0]) { times[i]++;len_str=str[i].length();dfs(i);} cout<<sum<<endl;return 0; }

?

總結

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

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