基本队列操作
#include<iostream> #include <queue> using namespace std; bool find(queue<int> q, int n) { bool flag=false; int size = q.size(); for (int i=0; i <size; ++i) { int a = q.front(); if (a == n) { flag= true; } q.pop(); } return flag; } int main() { int siz,n,a,count=0; queue <int> b; cin>>siz>>n; for(int i=0;i<n;i++) { cin>>a; if(!find(b,a)) { count++; if(b.size()<siz) b.push(a); else { b.pop(); b.push(a); } } } cout<<count; }
另一种用双端队列的写法,调用了algorithm头文件的函数,显得简洁一些
#include<iostream> #include <deque> #include <algorithm> using namespace std;
int main() { int siz,n,a,count=0; deque <int> b; cin>>siz>>n; for(int i=0;i<n;i++) { cin>>a; if(find(b.begin(),b.end(),a)==b.end()) { count++; if(b.size()<siz) b.push_back(a); else { b.pop_front(); b.push_back(a); } } } cout<<count; }