最小的N个和(codevs 1245)
有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个。
第一行输入一个正整数N;第二行N个整数Ai 且Ai≤10^9;第三行N个整数Bi,
且Bi≤10^9
输出仅一行,包含 n 个整数,从小到大输出这 N个最小的和,相邻数字之间用
空格隔开。
5
1 3 2 4 5
6 3 4 1 7
2 3 4 4 5
最暴力的方法:我们可以把所有情况都算出来,再排序,很显然,空间和时间都会爆。
网上的思路:(其实不是很明白这样算出来的i*j-1的前n个解就是最优解)
想办法把一些一定不可能的状态给消除掉。
首先还是给A,B排序,同样还是这个表:
| B\A | 1 | 2 | … | i | … | n |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| … | ||||||
| i | ||||||
| … | ||||||
| n |
观察到,对于(i,j)这个点,比它小的元素至少有i×j−1个。
由于我们要求前N小的,所以满足要求的点至少要满足i×j−1<n即i×j≤n。
这样我们可以把点的个数缩小至
时间复杂度:O(nlog2n)
空间复杂度:O(nlogn)
代码:实测172ms
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 100010
#define N 3000010
using namespace std;
int a[M],b[M],c[M];
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)
scanf("%d",&b[i]);
sort(a+,a+n+);
sort(b+,b+n+);
int cnt=;
for(int i=;i<=n;i++)
for(int j=;i*j<=n;j++)
c[++cnt]=a[i]+b[j];
sort(c+,c+cnt+);
for(int i=;i<=n;i++)
printf("%d ",c[i]);
return ;
}
另一种方法:堆排
思路:
{aa=3;bb=1;s=4};
{aa=3;bb=1;s=4};
{aa=3;bb=1;s=4};
#include <iostream>
#include <algorithm>
#include<cstdio>
#define M 100001
using namespace std;
struct node
{
int s,aa,bb;
};node tree[(M<<)+];
int a[M],b[M];
int n,len,kk;
int main()
{
freopen("jh.in","r",stdin);
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++)cin>>b[i];
sort(a+,a+n+);
sort(b+,b+n+);
for(int i=;i<=n;i++)
{
tree[i].aa=i;
tree[i].bb=;
tree[i].s=a[i]+b[];
}
len=n;
while()
{
cout<<tree[].s<<" ";
kk++;
tree[].bb++;
tree[].s=a[tree[].aa]+b[tree[].bb];
if(tree[].bb>n)tree[].s=1e9;
int q=;
while()
{
int q1=q<<,q2=q1+;
if(q1>len)break;
if(q2<=len&&tree[q2].s<tree[q1].s)q1=q2;
if(tree[q].s<=tree[q1].s)break;
else swap(tree[q],tree[q1]);
q=q1;
}
if(kk==n)break;
}
return ;
}
最小的N个和(codevs 1245)的更多相关文章
- AC日记——最小的N个和 codevs 1245
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- codevs 1245 最小的N个和
1245 最小的N个和 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N ...
- CODEVS 1245 最小的N个和 堆+排序
原题链接 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求 ...
- T1245 最小的N个和 codevs
http://codevs.cn/problem/1245/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度 ...
- Codevs No.1245 最小的N个和
2016-05-31 18:52:15 题目链接: 最小的N个和 Codevs No.1245 题目大意: 给两个等长数列,各取一个数求和,找到最小的N组 解法: 堆优化的大暴力 直接枚举所有可能在最 ...
- 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线
codevs 1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Z小镇是一个景色宜人 ...
- [Codevs 1421]秋静叶&秋穣子(最大-最小博弈)
题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的 ...
- 1245 最小的N个和
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B, ...
- codevs 2796 最小完全图
2796 最小完全图 http://codevs.cn/problem/2796/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 若一个图的每一对不 ...
随机推荐
- (转)eclipse项目导入到android studio中
原文:http://www.cnblogs.com/lao-liang/p/5016541.html?utm_source=tuicool&utm_medium=referral Androi ...
- yield return 和 yield break
//yield return 返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 IEnumerator<T>. static I ...
- Oracle 11g ORA-00845: MEMORY_TARGET not supported on this system
启动Oracle 11gR2后报错:ORA-00845 rac1:/home/oracle> sqlplus / as sysdba; SQL*Plus: Release 11.2.0.3.0 ...
- linux 搭建SVN服务器,为多个项目分别建立版本库并单独配置权限
1.安装svn服务 # yum install subversion 2.新建一个目录用于存储SVN所有文件 # mkdir /home/svn 3.在上面创建的文件夹中为项目 p ...
- JS闭包(转载加整理)
原文地址:http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量 ...
- ifconfig 工具
ifconfig 工具 ifconfig 命令常用格式: 格式:ifconfig显示当前激活的网络接口信息. 格式:ifconfig {INTERFACE}显示指定网络接口的信息.比如:eth0, e ...
- mysql集群实例
原文地址:http://www.it165.net/database/html/201403/5678.html http://www.cnblogs.com/seesea125/archive/20 ...
- 寻虫记:BOM头制造的冤案,无故多出空白行
最近在做的一个网站发生了一个很诡异的BUG: 使用IE浏览页面时,一切都挺正常: 而使用Firefox浏览时,发现某些页面元素之间的距离比预期的要宽很多,HTML元素本身的hight.padding和 ...
- Flip Game(dfs)
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32384 Accepted: 14142 Des ...
- SpringMVC关于json、xml自动转换的原理研究
SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC ...