Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
108659 毛泓博(做题专用,大号Fess) [NOIP2000 普及组/提高组] 单词接龙 C++ 解答错误 16 0 MS 260 KB 977 2023-11-04 09:10:57

Tests(1/6):


#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; }


测评信息: