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 ...
随机推荐
- mvc中常见的属性验证
客户端验证逻辑会对用户向表单输入的数据给出一个即时反馈.而之所以需要服务器端验证,是因为来自网络的信息都是不能被信任的. 当在ASP.NET MVC设计模式上下文中谈论验证时,主要关注的是验证模型的值 ...
- Linux内存管理和寻址详解
1.概念 内存管理模式 段式:内存分为了多段,每段都是连续的内存,不同的段对应不用的用途.每个段的大小都不是统一的,会导致内存碎片和内存交换效率低的问题. 页式:内存划分为多个内存页进行管理,如在 L ...
- 一起手写吧!Promise!
1.Promise 的声明 首先呢,promise肯定是一个类,我们就用class来声明. 由于new Promise((resolve, reject)=>{}),所以传入一个参数(函数),秘 ...
- Ibatis中SqlMapClientTemplate和SqlMapClient的区别
SqlMapClientTemplate是org.springframework.orm.ibatis下的 而SqlMapClient是ibatis的 SqlMapClientTemplate是Sql ...
- oracle 以SYSDBA远程连接数据库
在服务器用sysdba登陆 grant sysdba to system 然后在远程就可以sysdba登陆数据库了
- 10、Redis三种特殊的数据类型
一.Geospatail地理位置 1.Geospatail的应用 朋友的位置,附近的人,打车距离 2.相关命令 1.geoadd:增加某个地理位置的坐标(可批量添加). 语法: GEOADD key ...
- Python用xlrd读取Excel数据到list中再用xlwt把数据写入到新的Excel中
一.先用xlrd读取Excel数据到list列表中(存入列表中的数据如下图所示) import xlrd as xd #导入需要的包 import xlwt data =xd.open_workboo ...
- 前端浅谈---协议相关(TCP连接)
TCP连接 http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体 ...
- react功能实现-组件创建
这里主要从两个角度来分析创建一个组件需要怎么做,一个是元素,一个是数据.整理向,大量借鉴,非原创. 1.渲染组件. 我们先明确一点,所有的元素都必须通过render方法来输出渲染.所有,每个组件类最终 ...
- Docker 快速删除无用(none)镜像
Dockerfile 代码更新频繁,自然docker build构建同名镜像也频繁的很,产生了众多名为none的无用镜像. 分别执行以下三行可清除 docker ps -a | grep " ...