Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
7163 | admin | 单词接龙的最长长度 | C++ | 通过 | 100 | 26 MS | 252 KB | 953 | 2025-03-14 15:44:34 |
#include<iostream> using namespace std; string s[42], str, res; bool vis[42]; int n; char head; int longest; int check(string s1, string s2) { for (int i = s1.size() - 1; i >= 0; i--) { if(s1.substr(i)==s2.substr(0,s1.size()-i)) return s1.size() - i; } return -1; } void dfs(string ans, int dep) { if (ans.size() > longest) { longest = ans.size(); res = ans; } if (dep == 2 * n + 1)return; for (int i = 1; i <= 2 * n; i++) { if (dep == 1 && s[i][0] == head && !vis[i]) { vis[i] = 1; dfs(ans + s[i], dep + 1); vis[i] = 0; } else if (dep >= 2&&!vis[i]) { int pos=check(ans, s[i]); if (pos != -1) { vis[i] = 1; dfs(ans + s[i].substr(pos), dep + 1); vis[i] = 0; } } } } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i]; for (int i = n + 1; i <= 2 * n; i++) s[i] = s[i - n]; cin >> head; dfs(str, 1); cout<< longest << endl; return 0; }