zoukankan      html  css  js  c++  java
  • 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]);
        }
    }
  • 相关阅读:
    【STM32F429】第4章 RTX5操作系统移植(MDK AC5)
    【STM32F407】第4章 RTX5操作系统移植(MDK AC5)
    【STM32H7】第3章 RTX5操作系统介绍
    【STM32F429】第3章 RTX5操作系统介绍
    【STM32F407】第3章 RTX5操作系统介绍
    【STM32H7】第2章 初学RTX5准备工作
    【STM32F429】第2章 初学RTX5准备工作
    Hystrix解析(一)
    Eureka源码解析(五)
    Eureka源码分析(四)
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3894504.html
Copyright © 2011-2022 走看看