9#测试点到底是啥? 我的思路很简单,b[i]为到i号位置为止可能的方案,在此基础上接就行了。然后9#RE了
#include<bits/stdc++.h>
using namespace std;
struct st
{
string s;
int len,a[21];
};
int main()
{
int n,m,i,j,k,w[26]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,6,6,6,7,7,7,8,8,8,9,9,9};
cin>>n;
string s;
cin>>s;
m=s.size();
st a[n];
for(i=0;i<n;i++)
{
cin>>a[i].s;
a[i].len=a[i].s.size();
for(j=0;a[i].s[j];j++)
a[i].a[j]=w[a[i].s[j]-'a'];
}
string b[m+1];
for(i=0;i<=m;i++)
b[i]="A";
for(i=0;i<n;i++)
{
for(j=0;a[i].s[j];j++)
if((s[j]-'0')!=a[i].a[j])
break;
if(a[i].s[j]==0)
b[j-1]=a[i].s;
}
for(i=0;i<m;i++)
if(b[i]!="A")
{
for(j=0;j<n;j++)
{
for(k=0;i+k+1<=m && a[j].s[k] && a[j].a[k]==s[i+k+1]-'0';k++);
if(a[j].s[k]==0)
b[i+k]=b[i]+" "+a[j].s;
}
}
if(b[m-1]=="A")
cout<<"No Solutions!";
else
cout<<b[m-1];
return 0;
}