zoukankan      html  css  js  c++  java
  • hdu 1280 前m大的数

    hdu 1280 前m大的数

    Problem Description还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。 
    给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。 Input输入可能包含多组数据,其中每组数据包括两行: 
    第一行两个数N和M, 
    第二行N个数,表示该序列。
    Output对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。
    Sample Input4 41 2 3 44 55 3 6 4
    Sample Output7 6 5 511 10 9 9 8 代码如下:#include<iostream>
    #include<algorithm>  //sort函数的头文件
    using namespace std;
    int s[4500000];
    int main()
    {
        int s1[3000];
        int n,m,i,j,k;
        while(scanf("%d%d",&n,&m)==2)
        {
            for(i=0;i<n;i++)
                scanf("%d",&s1[i]);
            sort(s1,s1+n);         //对数组进行快排,默认从小到大
            j=0;
            for(i=n-1;i>=(n-m>0?n-m:0);i--)   //只取后面m位进行计算 避免重复计算 超时
            {
                for(k=i-1;k>=(n-m>0?n-m:0);k--)  //同上
                {
                    s[j++]=s1[i]+s1[k];
                }
            }
            sort(s,s+j);   //排序
            for(i=j-1;i>=j-m;i--) //取后m位输出
            {
                if(i!=j-1)
                    putchar(' ');   
                printf("%d",s[i]);
            }
            putchar(10);  //换行
        }
        return 0;
    }

    暴解好像也可以:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[10000000];
    int main()
    {
        int b[3001],i,j,k,n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i=0;i<n;i++)
                scanf("%d",&b[i]);
            k=0;
            for(i=0;i<n;i++)
                for(j=i+1;j<n;j++)
                {
                    a[k++]=b[i]+b[j];
                }
            sort(a,a+k);
            printf("%d",a[k-1]);
            for(i=k-2;i>=k-m;i--)
                printf(" %d",a[i]);
            printf("\n");
        }
        return 0;
    }

  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/crazyapple/p/2999514.html
Copyright © 2011-2022 走看看