题目1178:复数集合
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:10221
解决:1947
-
题目描述:
-
一个复数(x+iy)集合,两种操作作用在该集合上:
1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;
2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;
最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
-
输入:
-
输入有多组数据。
每组输入一个n(1<=n<=1000),然后再输入n条指令。
-
输出:
-
根据指令输出结果。
-
样例输入:
-
3 Pop Insert 1+i2 Pop
-
样例输出:
-
empty SIZE = 1 1+i2 SIZE = 0
-
提示:
-
模相等的输出b较小的复数。
a和b都是非负数。
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7901-1-1.html
-
#include<stdio.h> #include<stdlib.h> #include<vector> #include<algorithm> using namespace std; struct complex{ int a; int b; int mo; }; int cmp(complex A,complex B) { if(A.mo!=B.mo) return A.mo>B.mo; else return A.b<B.b; } vector<complex> edge; int main() { int n; while(scanf("%d",&n)!=EOF){ edge.clear(); while(n--){ char ans[10]={0}; char str[10]={0}; scanf("%s",ans); if(ans[0]=='P'){ if(edge.empty()==true){ printf("empty\n"); continue; } else{ sort(edge.begin(),edge.end(),cmp); complex s=edge.front(); printf("%d+i%d\n",s.a,s.b); edge.pop_back(); printf("SIZE = %d\n",edge.size()); } }else if(ans[0]=='I'){ complex x; scanf("%d+i%d",&x.a,&x.b); x.mo=x.a*x.a+x.b*x.b; edge.push_back(x); printf("SIZE = %d\n",edge.size()); } } } return 0; }