北邮机试 | bupt oj | 108. 虚数 | 优先队列 | 运算符重载

版权声明:本人小白,有错误之处恳请指出,感激不尽;欢迎转载 https://blog.csdn.net/stone_fall/article/details/88727552

时间限制 1000 ms 内存限制 65536 KB

题目描述

给你一个复数集合{Aj+i*Bj},保证Aj和Bj都是整数,初始为空集。

每次会给你如下两种操作中的一种:

       1."Insert x+iy",其中x,y都是整数。表示在集合中加入一个复数 x+iy,同时输出此时集合的大小;

       2."Pop"。如果集合为空集直接返回“Empty!”,如果有元素则以"x+iy"的形式显示集合中模值最大的复数,然后将该元素从集合中删除,之后在第二行显示操作之后的集合大小,如果为空集则显示“Empty!”。

输入格式

第一行只有一个数T,代表case数。0<=T<=10

每一组case:

       第一行有一个整数n,表示这组case中一共有n条命令 0<n<=100

       接下来n行每行有一个命令,命令如上所述

保证不会输入两个模值同样的元素,并保证实部虚部都大于0,小于1000。

输出格式

依照上述原则输出每一个命令对应的输出

如果输入命令是Insert命令,则对应的输出占一行为集合大小;

如果输入命令是Pop命令,则对应的输出占一行或者两行,为模值最大的复数和集合大小。

请注意,输出集合大小的格式为"Size:空格x回车",x为集合大小

输入样例

1
5
Pop
Insert 1+i2
Insert 2+i3
Pop
Pop

输出样例

Empty!
Size: 1
Size: 2
2+i3
Size: 1
1+i2
Empty!

AC代码

#include<bits/stdc++.h>
using namespace std;
struct Node{
    int x,y;
    int module;
    Node(int x=0,int y=0):x(x),y(y){
        module = x*x+y*y;
    }
    bool operator < (const Node &b) const{
        return module<b.module;
    }
};
priority_queue<Node> Q;
char op[20];

int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--){
        while(Q.empty()==false) Q.pop();
        scanf("%d",&n);
        while(n--){
            scanf("%s",op);
            if(op[0]=='P'){
                if(Q.empty()){
                    printf("Empty!\n");
                }
                else{
                    Node tmp = Q.top();
                    Q.pop();
                    printf("%d+i%d\n",tmp.x,tmp.y);
                    if(Q.empty()){
                        printf("Empty!\n");
                    }else{
                        printf("Size: %d\n",Q.size());
                    }
                }
            }
            else{
                int x,y;
                scanf("%d+i%d",&x,&y);
                Node tmp(x,y);
                Q.push(tmp);
                if(Q.empty()){
                    printf("Empty!\n");
                }else{
                    printf("Size: %d\n",Q.size());
                }
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/stone_fall/article/details/88727552