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 ...
随机推荐
- 【Swift】CoreData的使用
CoreData只是iOS数据持久化的其中一个方法,所有数据持久化如下 1.plist文件(属性列表),通常用于储存用户设置,也zhi可以用于存储捆绑的信息: 2.preference(偏好设置),常 ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...
- my39_InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
MySQL InnoDB支持三种行锁定方式: 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. 间隙锁(Gap Lock): 锁定索引记录间隙,确保索引记录的间隙不变.间隙锁是 ...
- 【Linux】【Service】【OpenSSL】原理及实现
1. 概念 1.1. SSL(Secure Sockets Layer安全层套接字)/TLS(Transport Layer Security传输层套接字). 最常见的应用是在网站安全方面,用于htt ...
- 【Java 8】Stream.distinct() 列表去重示例
在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct()是Stream接口的方法. distinct()使用 ...
- 错误: 找不到或无法加载主类(IDEA中启动spring boot项目)
版权声明:本文为博主原创文章,如果转载请给出原文链接:http://www.jufanshare.com/content/142.html 提示:需要对IDEA编辑工具使用熟悉 出现一个问题,就是sp ...
- springmvc中文件跨服务器传输的方法
//1.首先在tomcat的新端口上重新开启一个tomcat服务器fileuploadserver服务器,并且在webapps下新建一个uploads文件夹 //2.在业务服务器上书写前端页面和后端的 ...
- Go语言核心36讲(Go语言实战与应用二十五)--学习笔记
47 | 基于HTTP协议的网络服务 我们在上一篇文章中简单地讨论了网络编程和 socket,并由此提及了 Go 语言标准库中的syscall代码包和net代码包. 我还重点讲述了net.Dial函数 ...
- Redis持久化 aof和rdb的原理配置
目录 一.介绍 二.RDB持久化(全量写入) rdb原理 rdb模式 rdb触发情况 rdb优势和劣势 rdb文件配置 rdb命令配置 rdb数据恢复 三.AOF持久化(增量写入) aof原理 aof ...
- Jenkins视图管理
目录 一.简介 二.视图维护 创建视图 将项目加入视图中 三.状态图标变绿 四.看板 一.简介 在现在的编程中,公司往往采用的是模块化的编程方式,也就是说将一个项目拆分成许多模块,每个小项目组往往只负 ...