洛谷 P1540 机器翻译 (模拟+hash+queue)

只愿长相守 提交于 2019-11-27 04:58:12

题目链接:点击这里
在这里插入图片描述
在这里插入图片描述
队列模拟题,但是STL的queue没有查找函数,便用hash数组标记,AC感谢数据量小:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>

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;
int hash[maxn];

int main()
{
	queue<int> Q;
	int m,n,temp;
	scanf("%d%d",&m,&n);
	int cnt = 0;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&temp);
		if(hash[temp])	//如果temp在内存中,什么也不操作 
			continue;
		
		//如果temp不在内存中,便去外存查找,分情况入队列 
		cnt++;
		if(Q.size()<m)	//内存未满,标记后直接入队列 
		{
			hash[temp] = 1;
			Q.push(temp);
		}
		else if(Q.size()==m)	//内存已满,移除队首元素,入队列 
		{
			hash[Q.front()] = 0;
			Q.pop();
			hash[temp] = 1;
			Q.push(temp);
		}
	}
	printf("%d\n",cnt);
	return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!