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 ... 
随机推荐
- ProxyApi-大数据采集用的IP代理池
			用于大数据采集用的代理池 在数据采集的过程中,最需要的就是一直变化的代理ip. 自建adsl为问题是只有一个区域的IP. 买的代理存在的问题是不稳定,影响采集效率. 云vps不允许安装花生壳等,即使有 ... 
- 什么是DDL,DML,DCL
			转载自 https://www.2cto.com/database/201610/555167.html DML.DDL.DCL区别 . 总体解释: DML(data manipulation la ... 
- Redis | Redis常用命令及示例总结(API)
			目录 前言 1. Key(键) 1.1 键的基本操作功能 del move sort rename renamenx migrate 1.2 键的获取功能 type exists randomkey ... 
- typora 图床配置方法
			学习计算机的同学,在日常学习中难免会记笔记,写文档.相信大家记笔记大部分使用的都是 Markdown 吧,如果到现在还没接触,那我强烈建议你去学习一下,大概几分钟就可以搞定它. 注:下文用到的所有软件 ... 
- == 和 equals() 方法的区别
			== 在比较基本数据类型时,是比较两边的数据的值是否相等 // 整数类型 int num1 = 1; // 双精度浮点数类型 double num2 = 1.0; // 输出结果为 true Syst ... 
- 学习java 6.30
			学习内容:Java的运算符与C中类似,虽是类似,还是有点区别,在这里详细说明一下,即字符以及字符串的+操作,字符的+操作执行后需要赋值给表达式中数据范围最大的类型, 字符串的+操作,当+中有字符串,则 ... 
- 爬虫系列:存储 CSV 文件
			上一期:爬虫系列:存储媒体文件,讲解了如果通过爬虫下载媒体文件,以及下载媒体文件相关代码讲解. 本期将讲解如果将数据保存到 CSV 文件. 逗号分隔值(Comma-Separated Values,C ... 
- 转 onSaveInstanceState()和onRestoreInstanceState()使用详解
			转 https://www.jianshu.com/p/27181e2e32d2 背景 如果系统由于系统约束(而不是正常的应用程序行为)而破坏了Activity,那么尽管实际 Activity实例已经 ... 
- Vue中的8种组件通信方式
			Vue是数据驱动视图更新的框架,所以对于vue来说组件间的数据通信非常重要. 常见使用场景可以分为三类: 父子组件通信: props / $emit $parent / $children provi ... 
- Vue重要知识
			Event Bus 总线 Vue中的EventBus是一种发布订阅模式的实践,适用于跨组件简单通信. Vuex也可以用来组件中进行通信,更适用于多组件高频率通信. 使用方式: 1.把Bus注入到Vue ... 
