题解 | #复数集合#
复数集合
http://www.nowcoder.com/practice/abdd24fa839c414a9b83aa9c4ecd05cc
#include<iostream> #include<string> #include<queue> using namespace std; struct Complex{ int real,img; Complex(int real,int img):real(real),img(img){} bool operator < (Complex c) const{ return real*real+img*img < c.real*c.real+c.img*c.img; } }; int main(){ priority_queue myPriQueue; int n; string Opera; cin>>n; for(int i = 0; i < n; i++){ cin>>Opera; if(Opera=="Pop"){ if(myPriQueue.empty()) cout<<"empty"<<endl; else{ cout<<myPriQueue.top().real<<"+i"<<myPriQueue.top().img<<endl; myPriQueue.pop(); cout<<"SIZE = "<<myPriQueue.size()<<endl; } }else if(Opera=="Insert"){ int a,b; scanf("%d+i%d",&a,&b); myPriQueue.push(Complex(a,b)); cout<<"SIZE = "<<myPriQueue.size()<<endl; } } return 0; }
使用优先队列,根据题目的要求进行操作即可,优先队列需要重载"<"运算符来进行比较。
优先队列默认是使用大顶堆,如果要使用小顶堆,需要使用
priority_queue<typename, vector<typename>, greater<typename> > name;
的方式重新定义优先队列