1504: ZZ的橱柜(长沙理工oj)

来源:互联网 发布:2017即将上映的网络剧 编辑:程序博客网 时间:2024/04/28 02:54

http://www.acmore.net/problem.php?id=1504

利用优先队列,转化成O(m)的复杂度。

#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <fstream>#include <vector>#include <map>#include <queue>#include <stack>using namespace std ;const int maxn = 400005;int n,m;int a[maxn],b[maxn];struct node{    int i,j;    int sum;    void set(int ii,int jj,int s){        i = ii; j = jj; sum = s;    }    friend bool operator<(const node &a,const node &b){        return a.sum>b.sum;    }};priority_queue<node>que;int sum[maxn];int main(){    //freopen("test.txt","r",stdin);    //freopen("out.txt","w",stdout);    while(~scanf("%d%d",&n,&m)){        memset(sum,0,sizeof(sum));        while(!que.empty()) que.pop();        for(int i = 0;i < n;i++)            scanf("%d",a+i);        for(int i = 0;i < n;i++)            scanf("%d",b+i);        sort(a,a+n);        sort(b,b+n);        node temp;        for(int i = 0;i < n;i++){            temp.set(i,0,a[i]+b[0]);            que.push(temp);        }        node x,y;        /*while(!que.empty()){            printf("%d ",que.top().sum);            que.pop();        }*/        for(int i = 0;i < m;i++){           x = que.top();           //printf("%d %d %d\n",x.i,x.j,x.sum);           que.pop();           sum[i] = x.sum;           y.set(x.i,x.j+1,a[x.i]+b[x.j+1]);           que.push(y);        }        for(int i = 0;i < m;i++)            printf("%d\n",sum[i]);   }   return 0 ;} 


0 0
原创粉丝点击