sdutacm-迷之好奇

迷之好奇

TimeLimit: 2000MS Memory Limit: 65536KB

SubmitStatistic

Problem Description

FF得到了一个有n个数字的集合。不要问我为什么,有钱,任性。

FF很好奇的想知道,对于数字x,集合中有多少个数字可以在x前面添加任意数字得到。

如,x = 123,则在x前面添加数字可以得到41235123等。

Input

 多组输入。

对于每组数据

首先输入n(1<= n <= 100000)

接下来n行。每行一个数字y(1 <= y<= 100000)代表集合中的元素。

接下来一行输入m(1 <= m <= 100000),代表有m次询问。

接下来的m行。

每行一个正整数x(1 <= x <= 100000)

Output

 对于每组数据,输出一个数字代表答案。

Example Input

3

12345

66666

12356

3

45

12345

356

Example Output

1

0

1

Hint

 

Author

 zmx

#include <stdio.h>  
#include <string.h>  
int top;  
struct node  
{  
    int next[26];  
    int flag;  
} st[5001000];  
int creat()  
{  
    memset(st[top].next,-1,sizeof(st[top].next));  
    st[top].flag=0;  
    return top++;  
}  
void insertt(int root,char*s)  
{  
    int len=strlen(s);  
    for(int i=len-1; i>=0; i--)  
    {  
        int t=s[i]-'0';  
        if(st[root].next[t]==-1)  
        {  
            st[root].next[t]=creat();  
        }  
        st[root].flag++;  
        root=st[root].next[t];  
    }  
}  
int cmp(char *s,int root)  
{  
    int len=strlen(s);  
    for(int i=len-1; i>=0; i--)  
    {  
        int  t=s[i]-'0';  
        if(st[root].next[t]==-1)  
        {  
            return 0;  
        }  
        root=st[root].next[t];  
    }  
    return st[root].flag;  
}  
int main()  
{  
    int n,m,root;  
    char s[101];  
    char s1[101];  
    while(~scanf("%d",&n))  
    {  
        top=0;  
        root=creat();  
        while(n--)  
        {  
            scanf("%s",s);  
            insertt(root,s);  
        }  
        scanf("%d",&m);  
        while(m--)  
        {  
            scanf("%s",s1);  
            printf("%d\n",cmp(s1,root));  
        }  
    }  
    return 0;  
} 

/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 388ms
Take Memory: 1396KB
Submit time: 2017-02-10 16:44:15
****************************************************/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值