欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

[蓝桥杯2015决赛]密文搜索

发布时间:2023/12/4 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [蓝桥杯2015决赛]密文搜索 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述
福尔摩斯从X星收到一份资料,全部是小写字母组成。
他的助手提供了另一份资料:许多长度为8的密码列表。
福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。
请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。
要考虑密码的所有排列可能性。
输入
输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024
紧接着一行是一个整数n,表示以下有n行密码,1<=n<=1000
紧接着是n行字符串,都是小写字母组成,长度都为8
输出
一个整数, 表示每行密码的所有排列在s中匹配次数的总和。
样例输入
aaaabbbbaabbcccc
2
aaaabbbb
abcabccc
样例输出
4
提示
第一个密码匹配了3次,第二个密码匹配了1次,一共4次。

解题思路:
因为密码可以随机排列(全排列),故只要密码各个字母出现的次数与原字符串某连续8位各个字母出现的次数相同就代表一个答案。

代码如下:

#include <iostream> #include <cstring> #include <map> #include <algorithm> using namespace std; map<string, int>mp;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; }

总结

以上是生活随笔为你收集整理的[蓝桥杯2015决赛]密文搜索的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。