• Sequence(priority_queue)


    这题很智慧。

    VJ上4000多ms

    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include <stdio.h>
    #include <vector>
    using namespace std;
    int main()
    {
        int T,n,m,sum;
        int a[2005];
        scanf("%d",&T);
        while(T--)
        {
            priority_queue<int ,vector<int>, greater<int> >q;
            priority_queue<int ,vector<int>, less<int> >p;
            scanf("%d%d",&n,&m);
            for(int i=0; i<m; i++)
            {
                scanf("%d",&a[i]);
                q.push(a[i]);
            }
            for(int i=1; i<n; i++)
            {
                for(int j=0; j<m; j++)
                    scanf("%d",&a[j]);
                while(!q.empty())
                {
                    sum=q.top();
                    q.pop();
                    for(int j=0; j<m; j++)
                    {
                        if(p.size()==m&&p.top()>sum+a[j])
                        {
                            p.pop();
                            p.push(sum+a[j]);
                        }
                        else if(p.size()<m)
                        {
                            p.push(sum+a[j]);
                        }
                    }
                }
                while(!p.empty())
                {
                    sum=p.top();
                    p.pop();
                    q.push(sum);
                }
            }
            int flag=0;
            while(!q.empty())
            {
                sum=q.top();
                q.pop();
                if(flag==1)
                {
                    printf(" %d",sum);
                }
                else
                {
                    printf("%d",sum);
                    flag=1;
                }
            }
            printf("
    ");
        }
        return 0;
    }

    大神的代码(VJ上才刚900ms)

    #include <iostream>
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<string>
    using namespace std;
    int main()
    {
        priority_queue<int,vector<int>,less<int> >p;
        int n,m,i,j,a[2011],b[2011],t,k;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(i=0; i<m; i++)
                scanf("%d",&a[i]);
            sort(a,a+m);
            for(k=1; k<n; k++)
            {
                for(i=0; i<m; i++)
                {
                    scanf("%d",&b[i]);
                    p.push(a[0]+b[i]);
                }
                sort(b,b+m);
                for(i=1; i<m; i++)
                {
                    for(j=0; j<m; j++)
                    {
                        if(a[i]+b[j]>p.top())
                            break;
                        p.pop();
                        p.push(a[i]+b[j]);
                    }
                }
                for(i=0; i<m; i++)
                {
                    a[m-i-1]=p.top();
                    p.pop();
                }
            }
            for(i=0; i<m-1; i++)
                printf("%d ",a[i]);
            printf("%d
    ",a[m-1]);
        }
    }
  • 相关阅读:
    TCP和UDP的最完整的区别
    cluster模块实现多进程-让我的代理服务速度飞起来了
    redis多实例运行
    Nodejs实现代理服务器配置
    java统计程序运行的时间
    spring boot配置写法
    Redis: OOM command not allowed when used memory > ‘maxmemory
    最新版postgresql+pgboucer安装
    spring boot 数据库连接池配置
    Spring BOOT PERFORMANCE
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3894504.html
Copyright © 2020-2023  润新知