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 z, A 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.
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]='\0';
39 in(str);
40 }
41 scanf("%d",&m);
42 printf("Case %d:\n",s);
43 getchar();
44 while(m--)
45 {
46 gets(bb);
47 if(bb[0]=='\0')printf("1\n");
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]='\0';
66 if(uu>=3)
67 sort(ak+1,ak+uu-1);
68 sum*=(LL)ask(ak);
69 uu=0;
70 }
71 }
72 printf("%lld\n",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 }
1114 - Easily Readable的更多相关文章
- Light OJ 1114 Easily Readable 字典树
题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...
- iOS编码规范
The official raywenderlich.com Objective-C style guide. This style guide outlines the coding con ...
- 使用神经网络来识别手写数字【译】(三)- 用Python代码实现
实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...
- About SQLite
About SQLite See Also... Features When to use SQLite Frequently Asked Questions Well-known Users Boo ...
- js高级应用
特别板块:js跨域请求Tomcat6.tomcat7 跨域设置(包含html5 的CORS) 需要下载两个jar文件,cors-filter-1.7.jar,Java-property-utils-1 ...
- MySQL入门手册
本文内容摘自MySQL5.6官方文档,主要选取了在实践过程中所用到的部分文字解释,力求只摘录重点,快速学会使用MySQL,本文所贴代码地方就是我亲自练习过的代码,凡本文没有练习过的代码都没有贴在此处, ...
- javascript对json对象的序列化与反序列化
首先引入一个json2.js.官方的地址为:https://github.com/douglascrockford/JSON-js 这里为了方便我直接贴上源代码 /* json2.js 2013-05 ...
- iOS 注释的5要3不要和编码规范的26个方面
注释 代码注释,可以说是比代码本身更重要.这里有一些方法可以确保你写在代码中的注释是友好的: 不要重复阅读者已经知道的内容 能明确说明代码是做什么的注释对我们是没有帮助的. // If the col ...
- Effective Java 47 Know and use the libraries
Advantages of use the libraries By using a standard library, you take advantage of the knowledge of ...
随机推荐
- 学习java 7.13
学习内容: 一个汉字存储:如果是GBK编码,占用2个字节:如果是UTF-8编码,占用3个字节 汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数 字符流=字节流+编码表 采用何种规则编码,就要 ...
- accurate, accuse
accurate accurate(不是acute)和precise是近义词,precise里有个pre,又和excise(切除, 不是exercise),concise一样有cise.Why? 准确 ...
- Spark(二十一)【SparkSQL读取Kudu,写入Kafka】
目录 SparkSQL读取Kudu,写出到Kafka 1. pom.xml 依赖 2.将KafkaProducer利用lazy val的方式进行包装, 创建KafkaSink 3.利用广播变量,将Ka ...
- Redis(一)【基础入门】
目录 一.大型网站的系统特点 二.大型网站架构发展历程 三.从NoSQL说起 四.Redis简介 五.Redis安装 1.上传并解压 2.安装C语言编译环境 3.修改安装位置 4.编译安装 5.启动R ...
- ES6必知,变量的结构赋值。
对象和数组时 Javascript 中最常用的两种数据结构,由于 JSON 数据格式的普及,二者已经成为 Javascript 语言中特别重要的一部分. 在编码过程中,我们经常定义许多对象和数组,然后 ...
- Postman 中 Pre-request Script 常用 js 脚本
1. 生成一个MD5或SHA1加密的字符串str_md5,str_sha1 string1 = "123456"; var str_md5= CryptoJS.MD5(string ...
- DBMS_RANDOM包详解
DBMS_RAMDOM包中一共包含9个存储过程和函数,其中6个是现在用的,3个是已经过时的: 当前版本11gR2 每次生成一个随机数oracle都会初始化一个种子,也可以调用seed过程自己初始化一个 ...
- ReactiveCocoa操作方法-线程\时间
ReactiveCocoa操作方法-线程 deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用. subscribeOn: 内容传递和副作用 ...
- web管理的Powerdns
在powerdns服务器上安装相应的包(基于epel源) [root@powerdns ~]# yum install pdns pdns-backend-mysql -y 在master-maira ...
- freeswitch APR库线程读写锁
概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. 线程读写锁在多线程服务中有重要的作用.对于读数据比写数据频繁的服务,用读写锁代替互斥锁可以提高效率. 由于A ...