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;
}

posted on 2024-03-08 17:52  WHUStar  阅读(9)  评论(0编辑  收藏  举报