迷之好奇
TimeLimit: 2000MS Memory Limit: 65536KB
SubmitStatistic
FF得到了一個(gè)有n個(gè)數(shù)字的集合。不要問(wèn)我為什么,有錢(qián),任性。
FF很好奇的想知道,對(duì)于數(shù)字x,集合中有多少個(gè)數(shù)字可以在x前面添加任意數(shù)字得到。
如,x = 123,則在x前面添加數(shù)字可以得到4123,5123等。
Input
多組輸入。
對(duì)于每組數(shù)據(jù)
首先輸入n(1<= n <= 100000)。
接下來(lái)n行。每行一個(gè)數(shù)字y(1 <= y<= 100000)代表集合中的元素。
接下來(lái)一行輸入m(1 <= m <= 100000),代表有m次詢(xún)問(wèn)。
接下來(lái)的m行。
每行一個(gè)正整數(shù)x(1 <= x <= 100000)。
Output
對(duì)于每組數(shù)據(jù),輸出一個(gè)數(shù)字代表答案。
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: AcceptedTake time: 388msTake Memory: 1396KBSubmit time: 2017-02-10 16:44:15****************************************************/ 
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注