zoukankan      html  css  js  c++  java
  • 最小n个和(优先队列)

    给出两个包含 nn 个整数的数组 AA,BB。分别在 AA, BB 中任意出一个数并且相加,可以得到 n^2n2个和。求这些和中最小的 nn 个。

    输入格式
    输入第一行一个整数 n(1 le n le 50000)n(1≤n≤50000)。

    接下来一行输入数组 AA,用空格隔开。

    接下来一行输入数组 BB,用空格隔开。

    1 le A_i, B_i le 10^91≤Ai​,Bi​≤109

    输出格式
    从小到大输出最小的 nn 个和,用空格隔开。

    样例输入
    4
    1 3 5 7
    2 4 6 8
    样例输出
    3 5 5 7

    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    int n,a[100001],b[100001];
    struct node{
        int y,num;
        bool operator <(const node &v)const
        {
            return num>v.num;
        }
    };
    node k;
    priority_queue<node>q;
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
            cin>>b[i];
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        for(int i=1;i<=n;i++)
        {
            k.y=1;
            k.num=a[i]+b[1];
            q.push(k);
        }
        int s=1;
        while(s<=n)
        {
            node now=q.top();
            q.pop();
            if(now.y+1<=n)
            {
                k.y=now.y+1;
                k.num=now.num-b[now.y]+b[now.y+1];
                q.push(k);
            }s++;
            cout<<now.num<<" ";
        }
        return 0;
    }
    
    //AC
    #include<iostream>
    #include<queue>
    #include<algorithm>
    using namespace std;
    int a[100005],b[100005],c[100005];int n;;
    struct data{
        int aa,bb,c;
    }o[100005],z;
    bool operator<(data x,data y)
    {  return x.c>y.c;
    }
    priority_queue<data> q;
    int main()
    {  
       cin>>n;int l1=1,l2=1;
       for (int i=1;i<=n;++i)
       {  cin>>a[i];
       }
       sort(a+1,a+1+n);
       for (int i=1;i<=n;++i)
       {  cin>>b[i];
       }
       sort(b+1,b+1+n);
       for (int i=1;i<=n;++i)
       {  o[i].aa=1;
          o[i].bb=i;
          o[i].c=a[o[i].aa]+b[o[i].bb];
          q.push(o[i]);
       }
       for (int i=1;i<=n;++i)
       {  
          z=q.top();
          q.pop();
          cout<<z.c;
          if(i!=n)cout<<" ";
          z.aa++;
          z.c=a[z.aa]+b[z.bb];
          q.push(z);     
       }
    }
  • 相关阅读:
    退货给供应商批次库存不足时不能退其他供应商
    sqlserver删除重新安装,需要删除的注册表键值
    pb ole intercontrol 控制document的大小
    获取金额的大写格式
    pb 数字转化为大写金额
    js 轮播 flash
    sql:字符串按照某个字符分割后取第几个字符串
    split函数
    WEB2.0概念概述
    推荐所有的.NET开发人员阅读《J2EE Development without EJB》
  • 原文地址:https://www.cnblogs.com/geziyu/p/9921814.html
Copyright © 2011-2022 走看看