洛谷:P1540 [NOIP2010 提高组] 机器翻译
·
这是一道经典的模拟,队列问题,题目让我们计算出查询词典的次数,根据题目要求,只有当内存中没有该单词的时候我们才会,进行一次查询,而且根据题目该内存类似于队列,当队列中没有该单词的时候,将新单词压入队列中,将队首弹出。那么我们判断队列中是否有该单词呢,我们可以用哈希表来处理,对该单词的数量进行统计。接下来对队列的长度分队列的长度==给定长度和队列的长度<给定的长度这两种情况分别进行处理即可。
#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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)