IEEEXtreme Practice Community Xtreme9.0 - Dictionary Strings
Dictionary Strings
题目连接:
https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/dictionary-strings
Description
Gopal is preparing for a competitive exam and he has to prepare many topics for it. To remember the concepts better he identified a set of words from each topic. He prepared dictionaries for each of these topics with the set of identified words so that he can refer to them easily.
While recollecting the topics Gopal sometimes could not remember to which dictionary a certain word belongs. After all the hard work, Gopal didn’t want to lose marks due to this confusion. So he requested his friend, Govind, to help him identify a way to check if a word belongs to a dictionary.
Govind, being a very good friend of Gopal, wants to help him do better in the exam. So, after some thought, he finally came up with a solution.
For each dictionary, a string is chosen from which all the words can be made by selecting a subset of the characters from the string and rearranging them. (It is not necessary that the characters are consecutive and/or in the same order as in the string). They called this string a Dictionary String. When confused about to which dictionary a word belongs, Gopal can check if the word can be extracted from the Dictionary String for that dictionary.
To qualify as a Dictionary String, all the letters needed to explicitly form each word of the dictionary must be present in the string. You cannot reuse letters. Thus, the string aab is not a Dictionary String for a dictionary containing the word aaa since this word needs 3 a's whereas the candidate Dictionary String has only two a's.
To help Gopal memorize the Dictionary Strings better, Govind inserted extra characters in some of the Dictionary Strings that appeared harder to memorize. To distinguish those strings from others he calls a string without any extra characters, a Perfect Dictionary String.
Govind would like your help in verifying his program. For a set of words in a dictionary, you should indicate whether a string is a perfect dictionary string and/or a dictionary string. If a word is not a dictionary string, he would like you to tell him the minimum number of characters needed to convert the string to a dictionary string.
Notes:
Some of the test cases are very large, and may require you to speed up input handling in some languages.
In C++, for example, you can include the following line as the first line in your main function to speed up the reading from input:
std::ios_base::sync_with_stdio (false);
And in Java, you can use a BufferedReader to greatly speed up reading from input, e.g.:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// Read next line of input which contains an integer:
int T = Integer.valueOf(reader.readLine());
Input
Input begins with a single integer T, 1 <= T <= 100, which denotes number of test cases.
Each test case begins with a line, which contains 2 space-separated integers D and S. D represents the number of words in a dictionary, and S represents the number of potential dictionary strings to be checked. Note that 1 <= D, S <= 100.
Next follows D lines, each containing a word in the dictionary.
The remaining S lines in the test case each contain a potential dictionary string.
Notes: The words in the dictionary and the potential dictionary strings will consist of only lower-case letters. The lengths of these strings are greater than or equal to one character and less than or equal to 40,000 characters.
Output
For each of the S potential dictionary strings, you should output a line with two values separated by a space in the following format:
A1 A2
Where
A1 is either Yes or No denoting if a string is a Dictionary String or not.
If A1 is No, then A2 is the minimum number of characters needed to make the string a Dictionary String. If A1 is Yes, then A2 is Yes if the string is a Perfect Dictionary String, and No otherwise.
Sample Input
1
5 3
ant
top
open
apple
lean
anteplop
antelope
penleantopan
Sample Output
Yes Yes
No 1
Yes No
Hint
For the sample input, there is only one test case with 5 words in it and 3 strings to be checked.
anteplop: contains all the words from the dictionary and no extra characters. So it is both a Dictionary String and a Perfect Dictionary String. Hence, the output is Yes Yes.
antelope: the words “apple” cannot be made from this string. So it is not a Dictionary String and is missing 1 character (‘p’) to become a dictionary string. Hence the output No 1.
penleantopan: all the words of the dictionary can be made from this string but it also contains extra characters that are not required to build the words of the dictionary. So it is a Dictionary String but not a Perfect Dictionary String.
题意
给你d个字符串,然后给再你s个字典串字符串。
你需要对每一个字典串进行判断:(位置无关,可以重新排序)
是否d个字符串都是这个字典串的子串。
如果是,那么问你这个字典串是否所有字符都被用过。
如果不是,那么最少添加多少个字符,能够使得d个字符串都是字典串的子串。
题解
首先我们预处理d个字符串的每个字符出现的最高次数。
然后对于每一个s字符串,如果某个字符小于最高次数,那么显然是不合法的。
如果等于,那么就是YES
如果大于,那么显然不是每一个字符都被用过。
代码
#include<bits/stdc++.h>
using namespace std;
int a[26];
int b[26];
void init()
{
memset(a,0,sizeof(a));
}
void solve(){
int d,p;cin>>d>>p;
for(int i=0;i<d;i++){
string s;cin>>s;
memset(b,0,sizeof(b));
for(int j=0;j<s.size();j++)
b[s[j]-'a']++,
a[s[j]-'a']=max(a[s[j]-'a'],b[s[j]-'a']);
}
for(int i=0;i<p;i++)
{
string s;cin>>s;
memset(b,0,sizeof(b));
int flag=0,ans1=0,ans2=0;
for(int j=0;j<s.size();j++)
b[s[j]-'a']++;
for(int j=0;j<26;j++){
if(b[j]<a[j])
{
flag=-1;
ans1+=a[j]-b[j];
}
if(flag!=-1&&b[j]>a[j])
{
flag=1;
ans2+=b[j]-a[j];
}
}
if(flag==-1)
cout<<"No"<<" "<<ans1<<endl;
else if(flag==0)
cout<<"Yes Yes"<<endl;
else
cout<<"Yes No"<<endl;
}
}
int main()
{
std::ios_base::sync_with_stdio (false);
int t;cin>>t;
while(t--)
{
init();
solve();
}
return 0;
}
IEEEXtreme Practice Community Xtreme9.0 - Dictionary Strings的更多相关文章
- IEEEXtreme Practice Community Xtreme9.0 - Digit Fun!
Xtreme9.0 - Digit Fun! 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/di ...
- Xtreme9.0 - Communities 强连通
Xtreme9.0 - Communities 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/c ...
- Xtreme9.0 - Light Gremlins 容斥
Xtreme9.0 - Light Gremlins 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenge ...
- Swift3.0 中 Strings/Characters 闲聊
前言 本篇文章主要浅析字符串\字符在 Swift 和 Objective-C 之间的区别及其简单用法.如有不妥的地方还望大家及时帮忙纠正. 字符串判空 在 swift 语言中空字符串初始化方式常用的有 ...
- Xtreme9.0 - Block Art 线段树
Block Art 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/block-art Descr ...
- Xtreme9.0 - Taco Stand 数学
Taco Stand 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/taco-stand Des ...
- Xtreme9.0 - Pattern 3 KMP
Pattern 3 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/car-spark Descr ...
- Xtreme9.0 - Car Spark 动态规划
Car Spark 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/car-spark Descr ...
- Xtreme9.0 - Mr. Pippo's Pizza 数学
Mr. Pippo's Pizza 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/mr-pipp ...
随机推荐
- 高并发数据库之MySql性能优化实战总结
向MySQL发送一个请求时MySQL具体的操作过程 慢查询 1.慢查询 SHOW VARIABLES LIKE '%quer%' 索引优化技巧 1.对于创建的多列索引(复合)索引,只要查询条件使用了最 ...
- CSS规范 - 优化方案--(来自网易)
值缩写 缩写值可以减少CSS文件大小,并增加可读性和可维护性. 但并非所有的值都必须缩写,因为当一个属性的值缩写时,总是会将所有项都设置一遍,而有时候我们不希望设置值里的某些项. /* 比如我们用下面 ...
- iOS代码规范之命名规范
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 命名规范类命名 首字母大写,之 ...
- python学习之——import sys模块
(1)sys.argv sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突.另外,它也清晰地表明了这个名称是sy ...
- Java初转型-SSM配置文件
文章来源:http://www.cnblogs.com/wxisme/p/4924561.html web.xml的配置 ...
- linux 查看有哪些service
一.利用进程来查看命令里 ps -aux | grep xxx 是查看某个进程或者服务是否存在.二.利用chkconfig配置工具chkconfig --list 可以列出所有的服务在各个runlev ...
- linux远程windows执行命令
Linux下远程连接windows,执行命令 - Feng______的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/feng______/article/deta ...
- 公共语言运行库(CLR)开发系列课程(1):Pinvoke 简介 学习笔记
前言 让拖管代码对象和非托管对象协同工作的过程称为互用性(Interoperability),通常简称为 Interop. P/Invoke在托管代码与非托管代码交互式时产生一个事务(Transiti ...
- c# XML读取
System.Xml 命名空间 https://msdn.microsoft.com/zh-cn/library/gg145036(v=vs.110).aspx 一.读取 1.通过 XmlDocume ...
- MongoDB之pymongo
PyMongo是什么 PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成. 安装 环境:Ubuntu 14.04+python2.7+MongoDB 2 ...