Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
115607 | 陈家宝 | [NOIP2000 普及组/提高组] 单词接龙 | C++ | 通过 | 100 | 0 MS | 268 KB | 1396 | 2023-12-12 13:51:59 |
#include<bits/stdc++.h> using namespace std; int n,maps,b[20]; string str[20]; int pd(string s1,string s2){ for(int k=s1.size()-1;k>=0;k--){ bool r=1; int xxx=0; for(int i=k;i<=s1.size()-1;i++){ if(!(xxx<=s2.size()-1)){ r=0; break; } else if(s1[i]!=s2[xxx]){ r=0; break; } xxx++; } if(r) return k; } return -1; } void dfs(int cur,string s){ bool sss=1; for(int i=0;i<n;i++){ if(b[i]<=1){ sss=0; int xsx=pd(s,str[i]); if(xsx!=-1){ string sxs; for(int i=0;i<=xsx-1;i++) sxs+=s[i]; sxs+=str[i]; b[i]+=1; dfs(cur+1,sxs); b[i]-=1; } } } if(sss&&maps<s.size()) maps=s.size(); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=0;i<=n-1;i++) cin>>str[i]; char a; cin>>a; for(int i=0;i<n;i++){ if(str[i][0]==a){ b[i]=1; string xsx=str[i]; if(maps<xsx.size()) maps=xsx.size(); dfs(0,xsx); b[i]=0; } } cout<<maps; return 0; }