网站服务器和空间大小,用国外服务器做违法网站,百度新闻,如何做旅游网站的思维导图题目描述 福尔摩斯从X星收到一份资料#xff0c;全部是小写字母组成。 他的助手提供了另一份资料#xff1a;许多长度为8的密码列表。 福尔摩斯发现#xff0c;这些密码是被打乱后隐藏在先前那份资料中的。 请你编写一个程序#xff0c;从第一份资料中搜索可能隐藏密码的位…题目描述 福尔摩斯从X星收到一份资料全部是小写字母组成。 他的助手提供了另一份资料许多长度为8的密码列表。 福尔摩斯发现这些密码是被打乱后隐藏在先前那份资料中的。 请你编写一个程序从第一份资料中搜索可能隐藏密码的位置。 要考虑密码的所有排列可能性。 输入 输入第一行一个字符串s全部由小写字母组成长度小于1024*1024 紧接着一行是一个整数n,表示以下有n行密码1n1000 紧接着是n行字符串都是小写字母组成长度都为8 输出 一个整数, 表示每行密码的所有排列在s中匹配次数的总和。 样例输入 aaaabbbbaabbcccc 2 aaaabbbb abcabccc 样例输出 4 提示 第一个密码匹配了3次第二个密码匹配了1次一共4次。
解题思路 因为密码可以随机排列(全排列),故只要密码各个字母出现的次数与原字符串某连续8位各个字母出现的次数相同就代表一个答案。
代码如下
#include iostream
#include cstring
#include map
#include algorithm
using namespace std;
mapstring, intmp;int main() {int n;string s;cin s n;for (int i 0; i s.length() - 8; i) {string str s.substr(i, 8);//每次截取8位sort(str.begin(), str.end());//排序mp[str];}int ans 0;for (int i 0; i n; i) {string b;cin b;sort(b.begin(), b.end());//排序ans mp[b];//加上原字符串中符合这个密码的全部情况}cout ans endl;return 0;
}