Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
108659 | 毛泓博(做题专用,大号Fess) | [NOIP2000 普及组/提高组] 单词接龙 | C++ | 解答错误 | 16 | 0 MS | 260 KB | 977 | 2023-11-04 09:10:57 |
#include<bits/stdc++.h> using namespace std; int n,b[25],length,lmax; char ch; string a[25]; int check(int i,int j) { int flag; for(int k=1;k<min(a[i].length(),a[j].length());k++) { flag=1; for(int t=0;t<k;t++) { if(a[i][a[i].length()-k+t]!=a[j][t]) { flag=0; break; } } if(!flag) return k-1; } } bool check_() { for(int i=1;i<=n;i++) if(!b[i]) for(int k=1;k<=n;k++) if(check(i,k)) return false; return true; } void dfs(int step) { if(check_()&&length>lmax) { lmax=length; return; } for(int i=1;i<=n;i++) { if(step==0&&a[i][0]!=ch) continue; for(int j=1;j<=n;j++) { int t=check(i,j); if(!b[i]&&!b[j]&&t) { length+=(a[i].length()+a[j].length()-t); b[i]=b[j]=1; dfs(step+1); b[i]=b[j]=0; length-=(a[i].length()+a[j].length()-t); } } } } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>ch; dfs(0); cout<<lmax; return 0; }