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 ...
随机推荐
- html5 canvas 径向渐变2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [原]Android Fragment 入门介绍
Fragment Fragment 产生,优点,用途,使用方法简介 1 Fragmeng简介 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其上的是为 ...
- 【译】使用OpenVAS 9进行漏洞扫描
本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...
- ubuntu 开机自动挂载分区
转载: http://blog.sina.com.cn/s/blog_142e95b170102vx2a.html 我的计算机是双硬盘,一个是windows系统,一个是Fedora和ubuntu系统. ...
- Unity3d 常用代码
//创建一个名为"Player"的游戏物体 //并给他添加刚体和立方体碰撞器. player=new GameObject("Player"); player. ...
- CEO、COO、CFO、CTO、CXO
CEO:Chief Executive Officer 首席执行官——类似总经理.总裁,是企业的法人代表 COO:Chief Operating Officer 首席营运官——类似常务总经理 CFO: ...
- linux 串口驱动(二)初始化 【转】
转自:http://blog.chinaunix.net/uid-27717694-id-3493611.html 8250串口的初始化: (1)定义uart_driver.uart_ops.uart ...
- binlog2sql的安装及使用
binlog2sql是大众点评开源的一款用于解析binlog的工具,在测试环境试用了下,还不错. DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法 ...
- selenium用jquery改变元素属性
一.jQuery 语法 jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 1.基础语法: $(selector).action() 选择符(selector)即," ...
- Android 6.0 API
Android 6.0 (M) 为用户和应用开发者提供了新功能.本文旨在介绍其中最值得关注的 API. 着手开发 要着手开发 Android 6.0 应用,您必须先获得 Android SDK,然后使 ...