牛客 B.The flower(unordered_map、set)

久未见 提交于 2020-01-21 03:16:06

题目链接:点击这里
在这里插入图片描述
在这里插入图片描述
C++11中有新出4个关联式容器:unordered_map/unordered_multimap、unordered_set/unordered_multiset。这4个关联式容器与map/multimap、set/multiset功能基本类似,最主要就是底层结构不同,使用场景不同。

我们知道map和set实现的是 O(logn) 进行一个映射,其中内置的实现是红黑树。 多数时候已经非常优秀了,但是往往会有一些题用不到有序的序列(我们知道set内部是有序的),反而需要更快的速度。这个时候可以选择自己打hash,但是对于懒癌晚期患者自然想要以哈希桶为底层实现的 unordered_map & unordered_multiset 实现 O(1) 查询。

所以,如果需要得到一个有序序列,使用红黑树系列的关联式容器,如果需要更高的查询效率,使用以哈希表为底层的关联式容器。

AC代码如下:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 1010;

string s, tmp;
int k;
unordered_map<string,int> mmp;	//无序 
set<string> st, ans;	//有序 

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>s;
	int len = s.length();
	cin>>k;
	
	if(3*k > len)
	{
		cout<<"0"<<endl;
		return 0;
	}
	
	for(int i = 0; i <= len-k; i++)
	{
		tmp = s.substr(i, k);
        mmp[tmp]++;
        st.insert(tmp);
	}
	
	for(auto it : st)
		if(mmp[it]>2)
			ans.insert(it);
	
	cout<<ans.size()<<endl;
    for(auto it : ans)
		cout<<it<<endl;
	
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!