迷之好奇
2015-07-20 20:27
483 查看
TimeLimit:2000ms Memorylimit:65536K 有疑问?点这里^_^
题目描述
FF得到了一个有n个数字的集合。不要问我为什么,有钱,任性。FF很好奇的想知道,对于数字x,集合中有多少个数字可以在x前面添加任意数字得到。
如,x=123,则在x前面添加数字可以得到4123,5123等。
输入
多组输入。对于每组数据
首先输入n(1<=n<=100000)。
接下来n行。每行一个数字y(1<=y<=100000)代表集合中的元素。
接下来一行输入m(1<=m<=100000),代表有m次询问。
接下来的m行。
每行一个正整数x(1<=x<=100000)。
输出
对于每组数据,输出一个数字代表答案。
示例输入
3 12345 66666 12356 3 45 12345 356
示例输出
1 0 1
提示
来源
zmx
示例程序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#defineN500010
usingnamespacestd;
structnode
{
intcont;
intnext[10];
}head
;
inttop;
chars[11];
intcreat()
{
head[top].cont=0;
memset(head[top].next,-1,sizeof(head[top].next));
returntop++;
}
voidbuild(intp)
{
intj,len=strlen(s);
for(inti=len-1;i>=0;i--)
{
j=s[i]-'0';
if(head[p].next[j]==-1)
head[p].next[j]=creat();
head[p].cont++;
p=head[p].next[j];
}
}
intQuery(intp)
{
intj,len=strlen(s);
for(inti=len-1;i>=0;i--)
{
j=s[i]-'0';
if(head[p].next[j]==-1)
return0;
p=head[p].next[j];
}
returnhead[p].cont;
}
intmain()
{
intm,n;
intrt;
while(~scanf("%d",&n))
{
top=0;
rt=creat();
for(inti=0;i<n;i++)
{
scanf("%s",s);
build(rt);
}
scanf("%d",&m);
while(m--)
{
scanf("%s",s);
printf("%d\n",Query(rt));
}
}
return0;
}
相关文章推荐
- [dfs]poj1979 Red and Black
- ListView 和 Adapter 的基础
- UVA 10361
- PAT (Advanced Level) 1014. Waiting in Line (30) 银行排队
- 谈谈八皇后的问题
- poj 1258 Agri-Net(Prim)(基础)
- 画风、设计、ARPG:如何做好下一款三消游戏?
- 剑指off-找到最小k个数字
- 东华软件面试题
- OC中字符串用法总结
- 在CentOS 7中Samba服务安装和配置
- 每天一个小知识点8(jQuer总结二)
- 常见的查找算法
- Codeforces Round #290 (Div. 2)D. Fox And Jumping
- 职业性格测验量表
- tornado autoreload 模式
- igrimace最新安装源 apt.so/igrimace3
- 一个分布式服务器集群架构方案
- Test for Job (poj 3249 记忆化搜索)
- hdu 1178 免费馅饼