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

题目描述

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

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

本题唯一需要注意的地方就是,使用next_permutation()函数之前,一定要先对序列进行升序排序!
 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值