蓝桥杯 密文搜索(全排列)

题目描述

福尔摩斯从X星收到一份资料,全部是小写字母组成。
他的助手提供了另一份资料:许多长度为8的密码列表。
福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。

请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。
输入
输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024
紧接着一行是一个整数n,表示以下有n行密码,1<=n<=1000
紧接着是n行字符串,都是小写字母组成,长度都为8
输出
一个整数, 表示每行密码的所有排列在s中匹配次数的总和。
样例输入
aaaabbbbaabbcccc
2
aaaabbbb
abcabccc
样例输出
4

本题唯一需要注意的地方就是,使用next_permutation()函数之前,一定要先对序列进行升序排序!
 1 #include
 2 #include<string>
 3 #include
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string s;
10     int n;
11     string s1;
12     int cnt = 0;
13     cin >> s;
14     cin >> n;
15     while(n--)
16     {
17         cin >> s1;
18         sort(s1.begin(), s1.end());    // 使用全排列函数之前一定要将该序列排序 
19         do
20         {
21             if(s.find(s1) != string::npos)
22                 cnt++;                
23         }while(next_permutation(s1.begin(), s1.end()));
24     }
25     
26     cout << cnt << endl;
27     
28     return 0;
29 }

 



转载于:https://www.cnblogs.com/FengZeng666/p/10576640.html

你可能感兴趣的:(蓝桥杯 密文搜索(全排列))