题目1178:复数集合
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:7339
解决:1345
-
题目描述:
-
一个复数(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 <algorithm> #include <string.h> using namespace std; //我们要猥琐的混用C和C++的输入输出模式,以便我们更方便的解题,本题就是一个 //因使用scanf而方便的题目 //注意此题当中对输入的处理 struct number { int a; int b; int m; bool operator < (const number &A) const{ if(m!=A.m) return m>A.m; else return b<A.b; } }num[1010]; char s[100]; int main() { int n; int size; while(scanf("%d",&n)!=EOF) { size=0; while(n--) { scanf("%s",s); if(s[0]=='P') { if(size==0) printf("empty\n"); else{ sort(num,num+size); printf("%d+i%d\n",num[0].a,num[0].b ); size--; for(int i=0;i<size;++i) num[i]=num[i+1]; printf("SIZE = %d\n",size ); } } else if(s[0]=='I'){ scanf("%d+i%d",&num[size].a,&num[size].b); num[size].m=num[size].a*num[size].a+num[size].b*num[size].b; ++size; printf("SIZE = %d\n", size); } } } return 0; }