hdu1671求助!!!求dalao解救啊

cy1111111111111 2017-02-12 08:43:44

链接
http://acm.hdu.edu.cn/showproblem.php?pid=1671

题目意思:就是判断输入的电话号码中是否有号码是其他号码的前缀

想了很久也不知道wa在哪,看过很多博客,想法是一样的

代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

struct trie//建立
{
int exist;
trie *next[10];
} flag;

int deal(trie* T)//释放内存空间
{
int i;
for(i=0;i<=9;i++)
{
if(T->next[i]!=0)
deal(T->next[i]);
}
free(T);
return 0;
}

int main()
{
int t,n,L=0;//t是总样例数,n是号码数,L是能否成功判断标志
scanf("%d",&t);
long long k,len=0,x[100]={0};
trie* index;
while(t--)
{
L=0;
scanf("%d",&n);
flag.exist=0;
for(int i=0; i<=9; i++) //初始化
flag.next[i]=0;
for(int j=1; j<=n; j++)
{
len=0;
index=&flag;
scanf("%lld",&k);
while(k)
{
x[++len]=k%10; //将输入的号码拆分成一个个数字
k/=10;
}
for(int i=len; i>0; i--)
{
if(index->exist==1)
{
L=1;
break; //如果当前节点已存在号码,则必定输出no
}
if(index->next[x[i]]==0)
{
index->next[x[i]]=(trie *)malloc(sizeof(trie));
index=index->next[x[i]];
for(int q=0; q<=9; q++) //初始化
index->next[q]=0;
if(i==1)
index->exist=1;
else
index->exist=0;
}
else
{
index=index->next[x[i]];
if(i==1)
{
index->exist=1; //如果已经录入过相同前缀且当前为号码最后一位也输出no
L=1;
}
}
}
}
if(L==1)
printf("NO\n");
else
printf("YES\n");
index=&flag; //释放空间
deal(index);
}
return 0;
}
...全文
554 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧