| 记录编号 |
91605 |
评测结果 |
AAAAAAAAWA |
| 题目名称 |
1149.电话号码 |
最终得分 |
90 |
| 用户昵称 |
zjh001 |
是否通过 |
未通过 |
| 代码语言 |
C |
运行时间 |
0.002 s |
| 提交时间 |
2014-03-15 20:43:23 |
内存使用 |
0.27 MiB |
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
char a[105];//密码串
char s[105][25];//单词表
int key[105][25];
int used[105];
int ans[105];
char w[]="11122233344455666777888999";
int back(int x,int in)// x单词表中用地几个,in密码下标
{
int i,j;
if (strlen(a)-in<strlen(s[x])) return 0;
else
{
for (i=in;i<strlen(s[x])+in;i++)
{//printf ("*");
if (a[i]-'0'!=key[x][i-in]) return 0;
}
}
return 1;
}
int dfs(int index,int k)
{
int i;
if (index>=strlen(a))
{
for (i=0;i<k;i++)
printf ("%s ",s[ans[i]]);
return 1;
}
for (i=0;i<n;i++)
{
//if (used[i]==0)
if (back(i,index))
{
ans[k]=i;
used[i]=1;
//printf("%s\n",s[i]);
if (dfs(index+strlen(s[i]),k+1)) return 1;
used[i]=0;
}
}
return 0;
}
int main()
{
int i,j;
freopen("denwa.in","r",stdin);
freopen("denwa.out","w",stdout);
scanf ("%d",&n);
scanf ("%s",a);
for (i=0;i<n;i++)
scanf ("%s",s[i]);
for (i=0;i<n;i++)
{
for (j=0;j<strlen(s[i]);j++)
{
if (s[i][j]<='n') key[i][j]=(s[i][j]-'a')/3+1;
else key[i][j]=(s[i][j]-'a'-14)/3+6;
}
}
if (dfs(0,0)==0) printf ("No Solutions!");
//system("pause");
return 0;
}