这是一道经典的模拟,队列问题,题目让我们计算出查询词典的次数,根据题目要求,只有当内存中没有该单词的时候我们才会,进行一次查询,而且根据题目该内存类似于队列,当队列中没有该单词的时候,将新单词压入队列中,将队首弹出。那么我们判断队列中是否有该单词呢,我们可以用哈希表来处理,对该单词的数量进行统计。接下来对队列的长度分队列的长度==给定长度和队列的长度<给定的长度这两种情况分别进行处理即可。

#include <iostream>
#include <queue>
#include <unordered_map>
using namespace std;

int main() {
	int m, n; cin >> m >> n;
	queue<int> q;
	unordered_map<int,int> map;
	int ans = 0;
	while (n--) {
		int x; cin >> x;
		if (q.empty()) {
			q.push(x);
			map[x]++;
			ans++;
		}
		int k = q.size();
		if (k<m) {//查找队列内是否有该单词,如果没有就调入内存,否则下一个单词
			if (map[x] == 0) {//内存中没有该单词
				q.push(x);
				map[x]++;
				ans++;
			}
		}
		else if(k==m) {//如果有这个单词就下一个单词,如果没有就将队首pop,调入内存
			if (map[x] == 0) {//内存中没有该单词
				int w = q.front();
				q.pop();
				q.push(x);
				map[w]--;
				map[x]++;
				ans++;
			}
		}	
	}
	cout << ans;
	return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐