参考:
1. P1540 [NOIP2010 提高组] 机器翻译
#include<bits/stdc++.h>
#include<queue>
using namespace std;
queue<int> q;
map<int,bool> mp;
int m,n,cnt;
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int t;
cin>>t;
if(mp[t]==false){
q.push(t);
mp[t]=true;
cnt++;
}
if(q.size()==m+1){
mp[q.front()]=false;
q.pop();
}
}
cout<<cnt<<endl;
return 0;
}
2. P1996 约瑟夫问题
#include<bits/stdc++.h>
#include<queue>
using namespace std;
queue<int> q;
int main(){
int n,m,d,e=1,f=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
q.push(i);
}
while(q.size()){
if(e==m){//如果这个人正好被踢
cout<<q.front()<<" ";//先输出
q.pop();//再删除
e=1;//再从1开始报数
}else if(e!=m){//如果不被剔除
e++;//报数+1
q.push(q.front());//先把head压进队尾
q.pop();//再把head删除
}
}
cout<<endl;
return 0;
}