思考(与本题关系不大
主要是想通过这道题记录一下queue的模板
感觉之前为了赶进度有点丢掉了自己的初心
之前的想法就是看懂这个代码到底在干什么,然后完全脱离于教材上C语言的写法,自己写C++。由于我C++的部分知识的缺乏+为了赶进度,所以就搞出了不伦不类的一些代码…这种情况还是应该被避免的
思路:
至于本题的操作还是挺简单的,只要搞个vis[]判断一下是否在缓存里即可
第一种:左闭右开
#include#include using namespace std; int m,n; bool vis[111111111]; struct QUEUE { int head,tail,data[11111]; void init() { head=0,tail=0; } int size() { return tail-head; } int front() { return data[head]; } int back() { return data[tail-1]; } void pop() { head++; } void push(const int &x) { data[tail]=x; tail++; } }qu; int main() { cin>>m>>n; int ans=0; for(int i=1;i<=n;i++) { int x; cin>>x; if(vis[x]) continue; if(qu.size()==m) { vis[qu.front()]=0; qu.pop(); qu.push(x); vis[x]=1; ans++; } else { qu.push(x); vis[x]=1; ans++; } } cout< 第二种:
#includeusing namespace std; int n,m; bool vis[111111111]; struct QUEUE { int head,tail,data[11111]; void init() { head=1,tail=0; } int size() { return tail-head+1; } int front() { return data[head]; } int back() { return data[tail]; } void pop() { head++; } void push(const int &x) { data[++tail]=x; } }qu; int main() { cin>>m>>n; int ans=0; for (int i=1;i<=n;i++) { int x; cin>>x; if (vis[x]) continue; if (qu.size()==m) { vis[qu.front()]=false; qu.pop(); qu.push(x); vis[x]=true; ans++; } else { vis[x]=true; qu.push(x); ans++; } } cout<



