P8630 [蓝桥杯 2015 国 B] 密文搜索
网站:https://www.luogu.com.cn/problem/P8630
代码如下:
主要是用了map的思想
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<iomanip>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
map<string, int>mp;//注意map的用法
int main()
{
string s;
int n;
string each;
cin >> s;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> each;
sort(each.begin(), each.end());//因为输入的一串可以覆盖很多串,所以直接用最小的表示一类,注意sort的用法,不返回值
mp[each]++;//注意:同一个可能以不同形式存在,所以采用++
}
int ans = 0;
for (int i = 0; i < s.length() - 7; i++)
{
each = s.substr(i,8);//从头开始分割子串
sort(each.begin(), each.end());//找最小的作为代表
if (mp[each] >= 1)ans+= mp[each];//有几个密码对应到本子的,+=,其实不用判断mp[each]也可以,因为没有就是0,不会报错
}
cout << ans;
return 0;
}