还记得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 // 算法错误.
// 例如:要从序列10,9,9,0,0,0中输出前4大的数,结果应该是10+9,10+9,9+9,10+0
// 而此算法不会输出10+0,而会输出9+0
 #include <stdio.h>
#include <algorithm>
using namespace std;
bool cmp(int a, int b)
{ return a>b; }
int main()
{
int n, m, a[], i, j, k, x1, x2, flag;
while(scanf("%d %d", &n, &m)!=EOF)
{
for(i=;i<n;i++)
scanf("%d", &a[i]);
sort(a,a+n,cmp);
flag=;
for(j=;j<n-;j++)
{
x1=a[j];
for(k=j+;k<n;k++)
{
x2=a[k];
if(x1+x2>=a[j+]+a[j+])
{
flag++;
if(flag==m)
{ printf("%d\n", x1+x2); break; }
else printf("%d ", x1+x2);
}
else break;
}
if(flag==m) break;
}
if(flag!=m) printf("%d\n", a[j]+a[j+]);
}
return ;
}

WA

// 另开了一个数组存所有和,然后对这个数组排序
 #include <stdio.h>

 void shell_sort(int a[], int len)
{
int i,j, gap, t;
for(gap=len/; gap>; gap/=)
for(i=gap; i<len; i++)
for(j=i;j-gap>=&&a[j]>a[j-gap];j-=gap)
{ t=a[j-gap]; a[j-gap]=a[j]; a[j]=t; }
}
int a[],b[];
int main()
{
int n, m, i,j,k;
while(scanf("%d %d", &n, &m)!=EOF)
{
for(i=;i<n;i++)
scanf("%d", &a[i]);
i=;
for(j=;j<n-;j++)
for(k=j+;k<n;k++)
{ b[i]=a[j]+a[k]; i++; }
shell_sort(b,n*(n-)/);
for(i=;i<m-;i++)
printf("%d ",b[i]);
printf("%d\n", b[i]);
}
return ;
}

Time Limit Exceeded

// 另开一个数组,初始所有元素为0. 用下标表示和,值为和的个数.
// 不用排序,直接对数组遍历. 值大于零就输出下标(即和),并统计输出个数.
 #include <stdio.h>
int main()
{
int n, m, a[];
while(scanf("%d %d", &n, &m)!=EOF)
{
int b[]={};
for(int i=;i<n;i++)
scanf("%d", &a[i]);
for(int j=;j<n-;j++)
for(int k=j+;k<n;k++)
b[a[j]+a[k]]++;
int j=, flag=;
for(int i=;;i--)
if(b[i])
{
while(b[i]--)
{
j++;
if(j==m)
{ printf("%d\n", i); flag=; break; }
else printf("%d ", i);
}
if(flag) break;
}
}
return ;
}

AC

4J - 前m大的数的更多相关文章

  1. hdu---(1280)前m大的数(计数排序)

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. 找出数组前N大的数

    这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二 ...

  3. HDU 1280 前m大的数

    http://acm.hdu.edu.cn/showproblem.php?pid=1280 前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...

  4. 输出前n大的数(分治)

    描述:给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输 出. 输入: 第一行包含一个整数n,表示数组的大小.n < 100000.第二行包含n个整数,表示数组的元素,整数之间以一 ...

  5. 前m大的数(hdu1280)

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. 7617:输出前k大的数

    7617:输出前k大的数 查看 提交 统计 提问 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小 ...

  7. 输出前 k 大的数

    总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小 ...

  8. hdu 1280 前m大的数 哈希

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  9. 杭电 1280 前m大的数

    http://acm.hdu.edu.cn/showproblem.php?pid=1280 前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memor ...

随机推荐

  1. Python读写文件基础.py

    基本函数 定义 python内置了open()函数来操作文件,open()函数的定义为: open(file, mode='r', buffering=-1, encoding=None, error ...

  2. mysql 数据库必备命令操作,入门练习一下

    mysql 数据库必备命令操作 show databases: 查看所有的数据库: create database jfedu: 创建名为jfedu数据库: use nihao: 进入jfedu数据库 ...

  3. ArrayList删除--------ConcurrentModificationException问题

    在做项目中用到List存储数据,在里面做数据操作时候用到了删除.结果抛出ConcurrentModificationException异常.在这里把问题总结一下. 原因: ArrayList进行for ...

  4. js获取url传值的方法

    这篇文章主要介绍了js获取url传值的方法,实例分析了字符串分割与正则分析两种方法,并补充了一个基于正则匹配实现的js获取url的get传值函数,需要的朋友可以参考下 js获取url参数值: inde ...

  5. Java的学习02

    今天依旧记录一下今天的学习的知识. /** * 测试StringBuilder StringBuffer,可变字符序列 * String对象称为“不可变对象"指的是对象内部成员变量的值无法再 ...

  6. iftop网络流量查看工具

    1.下载iftop源码包 mkdir /usr/local/src/iftop cd /usr/local/src/iftop wget http://www.ex-parrot.com/~pdw/i ...

  7. python文件操作 二

    问题:在传输的时候对方不知道是以什么格式传给用户,传来传去彼此都忘了什么格式: 在编码的时候:utf8:是3个字符,gbk是2个字符,每个字符数字对应的字符,一段2进制串,如果10个字节全部都是中文, ...

  8. web漏洞详解及修复建议

    1.漏洞描述 跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私.钓鱼欺骗.偷取密码.传播恶意代码等攻击行为. 恶意的攻击者将对客户端有危害的 ...

  9. 二、Adapter 适配器

    适配器:继承适配与委托适配 需求:Banner 可以输出强电流380v.弱电流12v,但是不能被直接使用.通过别的方式,介间的使用banner? 委托类图: 代码清单: 需要隐藏的功能类: publi ...

  10. RecyclerView的单击和长按事件(转)

    转自:http://www.jianshu.com/p/f2e0463e5aef 前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了Recy ...