复数集合
题目描述
一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
输入描述
输入有多组数据。
每组输入一个n(1<=n<=1000),然后再输入n条指令。
输出描述
根据指令输出结果。
模相等的输出b较小的复数。
a和b都是非负数。
示例1
输入
3
Pop
Insert 1+i2
Pop
输出
empty
SIZE = 1
1+i2
SIZE = 0
注意
使用结构体排序
每次需要更新集合的大小
注意size的大小写
版本1
#include
using namespace std;
struct node{
int a,b;
}E[1005];
bool cmp(node a, node b){
int m1=a.a*a.a + a.b*a.b;
int m2=b.a*b.a + b.b*b.b;
if(m1 != m2) return m1 < m2;
else return a.b > b.b;
}
int main(){
int n,a,b,x;
while(cin>>n){
string s;
int k=0;
while(n--){
cin>>s;
if(s=="Pop"){
if(k==0) cout<<"empty"<<endl;
else{
sort(E,E+k,cmp);
cout<<E[k-1].a<<"+i"<<E[k-1].b<<endl;
k--;
cout<<"SIZE = "<<k<<endl;
}
}else{
cin>>s;
x=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
x = x*10 + s[i]-'0';
}else if(s[i]=='+'){
a=x;
x=0;
i++;
}
}
b = x;
E[k].a=a;
E[k].b=b;
k++;
cout<<"SIZE = "<<k<<endl;
}
}
}
return 0;
} 
海康威视公司福利 1125人发布