测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40860. 密文搜索

填空题 困难

题目描述

密文搜索

题目描述

福尔摩斯从 X 星收到一份资料,全部是小写字母组成。

他的助手提供了另一份资料:许多长度为 8 的密码列表。

福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。

请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。

输入格式

输入第一行:一个字符串 s,全部由小写字母组成,长度小于 1024*1024

紧接着一行是一个整数 n,表示以下有 n 行密码,1 ≤ n ≤1000

紧接着是 n 行字符串,都是小写字母组成,长度都为 8

输出格式

一个整数, 表示每行密码的所有排列在 s 中匹配次数的总和。

样例输入

aaaabbbbaabbcccc

2

aaaabbbb

abcabccc

样例输出

4

参考答案

#include <iostream> #include <algorithm> #include <cstring> #include <map> using namespace std; int ans; map<string, string> mp; int main() { string tmp; cin >> tmp; for (int i = 0; i < tmp.size() - 7; i ++) { string str = ""; for (int j = i; j < i + 8; j ++) str += tmp[j]; mp[str] = str; } int n; cin >> n; while(n --) { string s; cin >> s; sort(s.begin(), s.end()); do if(mp.count(s)) ans ++; while(next_permutation(s.begin(), s.end())); } cout << ans << endl; return 0; }

答案解析

第一个密码匹配了3次,第二个密码匹配了1次,一共4次。

上一题 下一题