2 条题解
-
10
这道题能出现在提高组还是算比较简单的了,整体算法就是一个简单的队列,分析一下——
其实这个题的思路本身就不算复杂,本
蒟蒻第一次提交就得了30分100分。我使用队列是因为我看到了“软件会清空最早进入内存的那个单词”这句话。
其实我们可以将整个内存看成一个先进先出的队列,存入就在队尾增加,删除就在队首删除。
最后再建一个变量,用于统计存入的次数——
换言之,就是共入队几次,答案就是几~
别问我为什么没用手动队列,我很严肃的告诉你:
因为——
我懒,我想给大家复习一下队列的用法!
上正文:
#include<bits/stdc++.h> using namespace std; queue<int> q; //创建队列用于模拟内存 int m,n,x,a; bool book[1005]; //book数组用于标记该单词是否已加入内存 void z(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ scanf("%d",&x); //输入单词编号x if(book[x])continue; //判断单词x是否在内存中 else{ if(q.size()>=m){ //判断内存是否溢出 book[q.front()]=false;//取消最早存入内存单词的标记 q.pop(); //删除最早存入内存的单词 } q.push(x); //将新单词加入队尾 book[x]=true; //标记新单词 a++; //次数增加 } } printf("%d",a); return; //返回主函数 } int main(){ z(); //不要在意,个人习惯,个人不习惯在主函数里写程序 return 0; //记住加这句,不然比赛的时候会错 }
该代码时间复杂度为
代码已 AC。
请放心食用相见就是缘分呀~
如果你看到了,不妨留下个赞再走呗,感谢观看~
886~
信息
- ID
- 1100
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 26
- 已通过
- 8
- 上传者