//当涉及到多次删除等操作,还是要用队列或栈之类,而不是用vector //若对输出有自定义优先级要求,则用优先队列 #include <queue> #include <string> #include <iostream> using namespace std; struct Complex{ int real; int imag; Complex(int a,int b): real(a),imag(b){} bool operator< (Complex x) const { //重载小于号 return real*real+imag*imag<x.real*x.real+x.imag*x.imag; } }; int main(){ int n; while(scanf("%d",&n)!=EOF){ priority_queue<Complex> myQueue; while(n--){ string str; cin>>str; if(str=="Pop"){ if(myQueue.empty()) printf("empty\n"); else{ Complex a=myQueue.top(); myQueue.pop(); printf("%d+i%d\n",a.real,a.imag); printf("SIZE = %d\n",myQueue.size()); } }else{ int a,b; scanf("%d+i%d",&a,&b); //scanf的这个操作类似于正则匹配 myQueue.push(Complex(a,b)); printf("SIZE = %d\n",myQueue.size()); } } } return 0; }