• HDU 1280


    前m大的数

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 5596 Accepted Submission(s): 1986


    Problem Description
    还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。
    给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。
     
    Input
    输入可能包含多组数据,其中每组数据包括两行:
    第一行两个数N和M,
    第二行N个数,表示该序列。

     
    Output
    对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。
     
    Sample Input
    4 4 1 2 3 4 4 5 5 3 6 4
     
    Sample Output
    7 6 5 5 11 10 9 9 8
     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 
     5 int tab[10010] ;
     6 int a[3010] ;
     7 int n, m;
     8 
     9 void output()
    10 {
    11     int i, cnt = 0;
    12     bool  flag = 0 ;
    13     for (i = 10000 ; i >= 0 ; i --)//最大的和为10000 
    14     {
    15         while (tab[i])
    16         {
    17             if(flag == 0) 
    18                flag = 1 ;
    19             else 
    20                cout<<" ";
    21             cout<<i;
    22             tab[i]-- ;
    23             cnt++ ;
    24             if (cnt == m) 
    25                return;//直接跳出两重for循环 
    26         }
    27     }
    28 }
    29 
    30 int main()
    31 {
    32     int i, j, k;
    33     while (cin>>n>>m)
    34     {
    35         for (i = 0 ; i < n ; i++)
    36             cin>>a[i];
    37         memset (tab, 0, sizeof (tab));//必须清零 ,因为是从10000开始的,不知道1到10000的某个数字是否出现过 
    38         /*
    39         不能 
    40         for(i = 0 ; i < n ; i++)
    41             for (j = 0 ; j <  n ; j++)
    42             if(i!=j)
    43                tab[k++] = a[i] + a[j];
    44            下面的qsort也可水过    
    45           for(i = 0 ; i < n ; i++)
    46             for (j = i+1 ; j <  n ; j++)
    47                tab[k++] = a[i] + a[j];
    48                
    49         */
    50         for(i=0;i<n;i++)
    51             for (j=i+1;j< n;j++)
    52                 tab[a[i]+a[j]]++ ;
    53         output() ;
    54         cout<<endl;
    55     }
    56     return 0 ;
    57 }
  • 相关阅读:
    课时8:环绕通知
    课时7:后置通知、异常通知
    课时6::AOP、execution表达式、前置通知
    课时:5 使用注解实现声明式事务
    课时22::PageHelper分页插件
    课时21 :使用MyBatis实现批量操作
    课时4:特殊值的注入问题和各种类型的自动装配
    课时3:三种方式的依赖注入、给各种集合类型的属性注入
    课时2:解耦合发展史、控制反转、依赖注入
    课时1:Spring环境搭建、STS工具、第一个Spring程序
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2670213.html
Copyright © 2020-2023  润新知