priority_queue:
合并果子
#include<bits/stdc++.h>
//有些OJ&版本不兼容,需使用iostream&queue
using namespace std;
int n,a,i,k,s;
int main(){
priority_queue<int, vector<int>, greater<int> >q;//定义小根堆
cin>>n;
for(i=1;i<=n;i++){
cin>>a;
q.push(a);//将a放入q
}
while(q.size()!=1){//如果q的元素大于1,继续
k=q.top();//k赋为q的顶端元素
q.pop();//弹出q的顶端元素
k+=q.top();
q.pop();
s+=k;//将s加上顶端两个的和
q.push(k);//k放回q
}
cout<<s;
return 0;
}
priority_queue常用的函数:
top:读入顶端元素
pop:删除顶端元素
size:返回元素个数
push:加入一个元素
empty:如果为空,返回true
queue:
约瑟夫问题
#include<bits/stdc++.h>
using namespace std;
int n,m,i,k;
int main(){
queue<int>q;
cin>>n>>m;
for(i=1;i<=n;i++)
q.push(i);//将编号为i的定为i
while(!q.empty()){//不为空继续
for(i=1;i<m;i++){
q.push(q.front());//把头复制到尾
q.pop();//弹出头
}
cout<<q.front()<<' ';
q.pop();//出队
}
return 0;
}
至于队列的常用函数,大概是:
front:读入队头
back:读入队尾
pop:删除队头
empty、size、push:同priority_queue