Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
139169 | 梁思宸 | 单词接龙 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1271 | 2024-03-21 23:47:37 |
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int ans,n; string a[21]; int eachTime[21]; char begin; bool ok(string s1,string s2) { for(int i=1;i<min(s1.length(),s2.length());i++) { if(s1.substr(s1.length()-i,i)==s2.substr(0,i)) { return true; } } return false; } string merge(string s1,string s2) { for(int i=1;i<s1.length();i++) { if(s1.substr(s1.length()-i,i)==s2.substr(0,i)) { return s1.substr(0,s1.length()-i).append(s2); } } } void search(string s,int foot) { for(int i=1;i<=n;i++) { if(eachTime[i]<2&&ok(s,a[i])) { eachTime[i]++; string down=merge(s,a[i]); search(down,down.length()); eachTime[i]--; } } ans=max(ans,foot); return; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } cin>>begin; for(int i=1;i<=n;i++) { if(a[i][0]==begin) { eachTime[i]++; search(a[i],a[i].length()); eachTime[i]--; } } cout<<ans; return 0; }