• BUPT复试专题—复数集合(?)


    https://www.nowcoder.com/practice/abdd24fa839c414a9b83aa9c4ecd05cc?tpId=67&tqId=29643&rp=0&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking

    题目描述

        一个复数(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



    维护一个struct做查询插入删除操作
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<queue>
    using namespace std;
    struct complex
    {
        int x;
        int y;
        int dis;
    };
    int main()
    {
        int num;
        while(scanf("%d",&num)!=EOF)
        {
            complex rec[1000];
            int size=0;
            while(num--)
            {
                string donser,ins;
                cin>>donser;
                if(donser[0]=='P')
                {
                    if(size==0)
                    {
                        cout<<"empty"<<endl;
                        continue;
                    }
                    else
                    {
                        int xi,yi,maxnum=0,maxi;
                        for(int i=0;i<size;i++)
                        {
                            complex temp;
                            temp=rec[i];
                            if(temp.dis>maxnum)
                            {
                                maxnum=temp.dis;
                                xi=temp.x;
                                yi=temp.y;
                                maxi=i;
                            }
                        }
                        for(int i=maxi+1;i<size;i++)
                            rec[i-1]=rec[i];
                        cout<<xi<<"+i"<<yi<<endl<<"SIZE = "<<--size<<endl;
                    }
                }
                else if(donser[0]=='I')
                {
                    cin>>ins;
                    complex temp;
                    temp.x=temp.y=0;
                    int i=0;
                    while(ins[i]!='+')
                    {
                        temp.x*=10;
                        temp.x+=ins[i]-'0';
                        i++;
                    }
                    i+=2;
                    while(ins[i]!='')
                    {
                        temp.y*=10;
                        temp.y+=ins[i]-'0';
                        i++;
                    }
                    temp.dis=temp.x*temp.x+temp.y*temp.y;
                    rec[size]=temp;
                    cout<<"SIZE = "<<++size<<endl;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    LuoguP2765 魔术球问题
    LuoguP1402 酒店之王
    luoguP4313 文理分科
    玲珑杯 1138
    codeforces 822 D. My pretty girl Noora(dp+素数筛)
    codeforces 822 C. Hacker, pack your bags!(思维+dp)
    51nod 1376 最长递增子序列的数量(不是dp哦,线段树 +  思维)
    hdu4565 So Easy!(矩阵快速幂)
    atcode E
    atcoder D
  • 原文地址:https://www.cnblogs.com/dzzy/p/8260683.html
Copyright © 2020-2023  润新知