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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷P1019 单词接龙

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P1019 单词接龙 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

輸入輸出格式

輸入格式:

?

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

?

輸出格式:

?

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

?

?

本題我本來打算在深搜的時候在處理兩個單詞的相交部分,但發現預處理一下會更好

要注意使用string變量求其長度與char變量求長度有所不同;

string a;? int length=a.size(); ? ? //注意此處不是size(a),一開始我在VScode上編譯竟沒報錯,然后提交洛谷評測,成功CE。。。

char a;? int length=strlen(a);

?

?

代碼如下:

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<string> 7 using namespace std; 8 #define maxn 1010 9 #define ll long long 10 #define IL inline 11 #define clear(a) memset(a,0,sizeof a) 12 IL void read(int &x) 13 { 14 x = 0;int f = 1;char ch = getchar(); 15 while(ch<'0'||ch>'9'){if(ch=='-')f = -f;ch = getchar();} 16 while(ch>='0'&&ch<='9'){x = x * 10 + ch - '0', ch = getchar();}x *= f; 17 } 18 19 int n, ans; 20 char head; 21 int color[maxn], used[maxn]; 22 int contact[maxn][maxn]; 23 string z[maxn]; 24 25 void solve(int x,int y) 26 { 27 for (int i = 1; i <= min(z[x].size(), z[y].size()) - 1; i++) 28 { 29 int lazy = 0; 30 int pry = 0; 31 for (int j = z[x].size() - i; j <= z[x].size() - 1;j++) 32 { 33 if(z[x][j]==z[y][pry]) 34 pry++; 35 else 36 { 37 lazy = 1; 38 break; 39 } 40 } 41 if(lazy) 42 continue; 43 else 44 { 45 contact[x][y] = i; 46 break; 47 } 48 } 49 } 50 51 void dfs(int id,int length) 52 { 53 ans = max(ans, length); 54 for (int i = 1; i <= n;i++) 55 { 56 if(color[i]>=2) 57 continue; 58 if(contact[id][i]) 59 { 60 color[i]++; 61 dfs(i, length+z[i].size()-contact[id][i]); 62 color[i]--; 63 } 64 } 65 ans = max(ans, length); 66 } 67 68 int main() 69 { 70 read(n); 71 for (int i = 1; i <= n;i++) 72 cin >> z[i]; 73 cin >> head; 74 for (int i = 1; i <= n;i++) 75 for (int j = 1; j <= n;j++) 76 solve(i, j); 77 for (int i = 1; i <= n; i++) 78 if (z[i][0] == head) 79 { 80 color[i] = 1; 81 dfs(i, z[i].size()); 82 color[i] = 0; 83 } 84 cout << ans; 85 return 0; 86 }

?

轉載于:https://www.cnblogs.com/KGW-/p/10367997.html

總結

以上是生活随笔為你收集整理的洛谷P1019 单词接龙的全部內容,希望文章能夠幫你解決所遇到的問題。

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