🍄前言
大家好,我是一勺黑猫。今天是每日一题的第八天,欢迎更多小伙伴加入到我们的打卡计划中,希望和你们在学习算法的路上一起进步~
🙎作者简介:一个正在努力学算法和后端的大三girl
?每日一题打卡地:高校算法学习社区
🎈联系方式:157543570(qq)
🍄今日题目
P1540 [NOIP2010 提高组] 机器翻译 - 洛谷 | 计算机科学教育新生态
🌰思路:今天的题目很舒服,内存先进先出就用队列模拟,为了省事(懒),再搭配一个set查看单词是否在内存中就可以了,set也可以用数组等结构代替~
🌰AC代码:
#include<iostream>
#include<queue>
#include<set>
using namespace std;
int main(){
queue<int> q; //模拟内存
set<int> sset; //判断单词是否在内存中
int m,n;
cin>>m>>n;
int t,ans=0;
for(int i=0;i<n;i++){
cin>>t;
if(sset.find(t)==sset.end()){
ans++;
//内存满了就移除第一个单词,不要忘记在sset中删掉该单词
if(q.size()==m){
int first=q.front();
q.pop();
sset.erase(first);
}
q.push(t);
sset.insert(t);
}
}
cout<<ans;
return 0;
}
|