zoukankan      html  css  js  c++  java
  • 1114

    1114 - Easily Readable
    Time Limit: 2 second(s) Memory Limit: 32 MB

    As you probably know, the human information processor is a wonderful text recognizer that can handle even sentences that are garbled like the following:

    The ACM Itrenntaoial Clloegaite Porgarmmnig Cnotset (IPCC) porvdies clolgee stuetnds wtih ooppriuntetiis to itnrecat wtih sutednts form ohetr uinevsrtieis.

    People have claimed that understanding these sentences works in general when using the following rule: The first and last letters of each word remain unmodified and all the characters in the middle can be reordered freely. Since you are an ACM programmer, you immediately set on to write the following program: Given a sentence and a dictionary of words, how many different sentences can you find that could potentially be mapped to the same encoding?

    Input

    Input starts with an integer T (≤ 20), denoting the number of test cases.

    Each case starts with a line containing the number n (0 ≤ n ≤ 10000) of words in the dictionary, which are printed on the following n lines. After this, there is a line containing the number m (0 ≤ m ≤ 10000)of sentences that should be tested with the preceding dictionary and then m lines containing those sentences. The sentences consist of letters from a to zA to Z and spaces only and have a maximal length of10000 characters. For each word in the dictionary a limitation of 100 characters can be assumed. The words are case sensitive. In any case, total number of characters in the sentences will be at most 105. And total characters in the dictionary will be at most 105.

    Output

    For each case, print the case number first. Then for each sentence, output the number of sentences that can be formed on an individual line. Result fits into 32 bit signed integer.

    Sample Input

    Output for Sample Input

    1

    8

    baggers

    beggars

    in

    the

    blowed

    bowled

    barn

    bran

    1

    beggars bowled in the barn

    Case 1:

    8

    Note

    Dataset is huge, use faster I/O methods.


    SPECIAL THANKS: JANE ALAM JAN (SOLUTION, DATASET)
    字典树;要用静态数组否则MLE;
      1 #include<stdio.h>
      2 #include<algorithm>
      3 #include<iostream>
      4 #include<string.h>
      5 #include<queue>
      6 #include<stack>
      7 #include<map>
      8 #include<math.h>
      9 #include<stack>
     10 using namespace std;
     11 typedef long long LL;
     12 char str[105];
     13 char bb[100006];
     14 char ak[105];
     15 void in(char *v);
     16 int ask(char *vv);
     17 int tree[100006][52];
     18 int val[100006];
     19 int nn=0;
     20 int sk=1;
     21 int main(void)
     22 {
     23     int i,j,k;
     24     scanf("%d",&k);
     25     int s;
     26     for(s=1; s<=k; s++)
     27     {
     28         int n,m;sk=1;
     29         memset(tree,-1,sizeof(tree));
     30         memset(val,0,sizeof(val));
     31         scanf("%d ",&n);
     32         for(i=0; i<n; i++)
     33         {
     34             scanf("%s",str);
     35             int l=strlen(str);
     36             if(l>=3)
     37                 sort(str+1,str+l-1);
     38             str[l]='';
     39             in(str);
     40         }
     41         scanf("%d",&m);
     42         printf("Case %d:
    ",s);
     43         getchar();
     44         while(m--)
     45         {
     46             gets(bb);
     47             if(bb[0]=='')printf("1
    ");
     48             else
     49             {
     50                 int l=strlen(bb);
     51                 int uu=0;
     52                 int flag=0;
     53                 LL sum=1;
     54                 bb[l]=' ';
     55                 for(i=0; i<=l; i++)
     56                 {
     57                     if(bb[i]!=' ')
     58                     {
     59                         flag=1;
     60                         ak[uu++]=bb[i];
     61                     }
     62                     else if(flag==1&&bb[i]==' ')
     63                     {
     64                         flag=0;
     65                         ak[uu]='';
     66                         if(uu>=3)
     67                             sort(ak+1,ak+uu-1);
     68                         sum*=(LL)ask(ak);
     69                         uu=0;
     70                     }
     71                 }
     72                 printf("%lld
    ",sum);
     73             }
     74         }
     75     }
     76     return 0;
     77 }
     78 void in(char *v)
     79 {
     80     int l=strlen(v);
     81     int i,j;
     82     int cc;
     83     int k=0;
     84     for(i=0; i<l; i++)
     85     {
     86         if(v[i]>='A'&&v[i]<='Z')
     87         {
     88             cc=v[i]-'A'+26;
     89         }
     90         else
     91             cc=v[i]-'a';
     92         if(tree[k][cc]==-1)
     93         {
     94             tree[k][cc]=sk;
     95             k=sk;
     96             sk++;
     97             nn++;
     98         }
     99         else k=tree[k][cc];
    100     }
    101     val[k]++;
    102 }
    103 int ask(char *vv)
    104 {
    105     int l=strlen(vv);
    106     int i,j;
    107     int cc;
    108     int ak=0;
    109     for(i=0; i<l; i++)
    110     {
    111         if(vv[i]>='A'&&vv[i]<='Z')
    112         {
    113             cc=vv[i]-'A'+26;
    114         }
    115         else
    116             cc=vv[i]-'a';
    117         if(tree[ak][cc]==-1)
    118             return 0;
    119         ak=tree[ak][cc];
    120     }
    121     return val[ak];
    122 }
    油!油!you@
  • 相关阅读:
    阿里云 CentOS 安装JDK
    【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器
    【JSP&Servlet学习笔记】4.会话管理
    【HeadFirst设计模式】13.与设计模式相处
    【HeadFirst设计模式】12.复合模式
    【HeadFirst设计模式】11.代理模式
    【HeadFirst设计模式】10.状态模式
    【HeadFirst设计模式】9.迭代器与组合模式
    【HeadFirst设计模式】8.模板方法模式
    【HeadFirst设计模式】7.适配器模式与外观模式
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5515956.html
Copyright © 2011-2022 走看看