首页 > 其他 > 详细

北邮OJ 108 虚数

时间:2015-03-24 09:19:16      阅读:242      评论:0      收藏:0      [点我收藏+]

时间限制 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!

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef struct node
{
    int x,y;
}Node;
bool cmp(Node a,Node b)
{
    double m=sqrt(a.x*a.x+a.y*a.y);
    double n=sqrt(b.x*b.x+b.y*b.y);
    return m>n;
}
int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            int n,i;
            scanf("%d",&n);
            vector<Node> vec;
            char op[10];
            while(n--)
            {
                int x,y;
                scanf("%s",op);
                if(op[0]=='P')
                {
                    if(vec.size()==0)
                        printf("Empty!\n");
                    else
                    {
                        sort(vec.begin(),vec.end(),cmp);
                        printf("%d+i%d\n",vec[0].x,vec[0].y);
                        vec.erase(vec.begin());
                        if(vec.size()>0)
                        printf("Size: %d\n",vec.size());
                        else
                        printf("Empty!\n");
                    }
                }
                else
                {
                    Node node;
                    scanf("%d+i%d",&node.x,&node.y);
                    vec.push_back(node);
                    printf("Size: %d\n",vec.size());
                }


            }
        }
    }
}



北邮OJ 108 虚数

原文:http://blog.csdn.net/ruzhuxiaogu/article/details/44572799

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!