题解 | #复数集合#
复数集合
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;
的方式重新定义优先队列
