还记得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. sqlalchemy 学习-- 多表操作

    一对多:一对一 # one -- many class Students(Base): __tablename__ = "students" sid = Column(Intege ...

  2. python 验证码test

    灰度化 #coding:utf8 import re import urllib import urllib2 import requests from PIL import Image import ...

  3. A*寻路初探(转载)

    启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...

  4. Asp.Net WebApi 学习记录(一)

    刚创建的 Asp.Net Web Api 项目,在进行简单的测试时发现返回的 JSON 数据很丑陋.与平时我们使用的 JSON.NET 序列化出来的字符串不一样.通过下面的设置就可以了: // 清除所 ...

  5. 2017-2018面向对象程序设计(Java)课程助教工作职责及分工

    2017-2018面向对象程序设计(Java)课程助教工作职责及分工 一.研究生助教团队名单 张光辉,王玉环,牟巧玲,徐进 二.工作职责与要求 1) 针对所指导学习小组学生,批改课程实验作业每周一次, ...

  6. 05_ssm基础(四)之Spring与持久层的整合

    30.31.spring对jdbc的支持jdbcTemplate 使用Spring的JDBC准备:  1):拷贝jar:       mysql-connector-java-5.1.11.jar:M ...

  7. 消息队列RabbitMQ与Spring

    1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 官网:http://www.rabbitmq.c ...

  8. 2.3、CDH 搭建Hadoop在安装(安装Cloudera Manager Server)

    第3步:安装Cloudera Manager Server 在此步骤中,您将在Cloudera Manager主机上安装JDK和Cloudera Manager Server软件包. 安装Cloude ...

  9. python远程操作服务器

    python远程控制 标签(空格分隔): 远程Linux python远程控制:方案: Paramiko Pexpect(主要Linux机器) 安装Paramiko pip install param ...

  10. 使用fckeditor上传多张图片

    流程: 1.使用fck上传图片到后台 2.后台上传图片到服务器端 3.服务器端返回上传信息 1.jsp页面 <script type="text/javascript"> ...