洛谷 P1631 序列合并
来源:互联网 发布:linux 自动挂载硬盘 编辑:程序博客网 时间:2024/06/15 07:11
洛谷 P1631 序列合并
题目
题目描述
有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个。
输入输出格式
输入格式:
第一行一个正整数N;
第二行N个整数Ai,满足Ai<=Ai+1且Ai<=10^9;
第三行N个整数Bi, 满足Bi<=Bi+1且Bi<=10^9.
【数据规模】
对于50%的数据中,满足1<=N<=1000;
对于100%的数据中,满足1<=N<=100000。
输出格式:
输出仅一行,包含N个整数,从小到大输出这N个最小的和,相邻数字之间用空格隔开。
输入输出样例
输入样例#1:
32 6 61 4 8
输出样例#1:
3 6 7
题解
二分一个最大值x,然后循环二分查找(x-a[i])的位置(y),使得y恰好满足x-a[i]>=b[y],累积所有的y,若比n大则说明x可行
最后只要输出,满足n<= ∑ min(y),x-a[i]>=b[y] (i∈[1,n]) x的最小值下,然后将所有的满足 x-a[i]>=b[j] 的b[y]+a[i] 的值计入数组,排序后输出前n个值
代码
#include<cstdio>#include<cstdlib>using namespace std;int n,maxn,tot,ret;int q[200005],a[100005],b[100005];int readln(){ int x=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while ('0'<=ch&&ch<='9') x=x*10+ch-48,ch=getchar(); return x;}int find(int x){ int l=0,r=n,mid,ans=0; while (l<=r) { mid=(r+l)/2; if (b[mid]<=x) {l=mid+1;ans=mid;} else r=mid-1; } return ans;}bool check(int x){ ret=0; for (int i=1;i<=n;i++) { ret+=find(x-a[i]); if (ret>=n) return true; } return false;}void qsort(int l,int r){ int i=l,j=r,mid=q[rand()%(r-l+1)+l],t; do{ while (q[i]<mid) i++; while (q[j]>mid) j--; if (i<=j) { t=q[i];q[i]=q[j];q[j]=t; i++;j--; } } while (i<=j); if (i<r) qsort(i,r); if (l<j) qsort(l,j);}int main(){ n=readln(); for (int i=1;i<=n;i++) a[i]=readln(); for (int i=1;i<=n;i++) b[i]=readln(); int l=1,r=2000000000,mid; while (l<=r) { mid=(l+r)/2; if (check(mid)) {r=mid-1;maxn=mid;} else l=mid+1; } for (int i=1;i<=n;i++) { int limit=find(maxn-a[i]); for (int j=1;j<=limit;j++) tot++,q[tot]=a[i]+b[j]; } qsort(1,tot); for (int i=1;i<=n;i++) printf("%d ",q[i]); return 0;}
阅读全文
0 0
- 洛谷 P1631 序列合并
- 洛谷P1631 序列合并
- 洛谷P1631 序列合并
- 洛谷 P1631 序列合并
- 洛谷 P1631 序列合并
- 洛谷P1631 序列合并
- 洛谷 P1631 序列合并
- 洛谷P1631 序列合并
- 洛谷 P1631 序列合并
- |洛谷|堆|P1631 序列合并
- P1631 序列合并
- [洛谷P1631]序列合并/[codevs1245]最小的N个和
- [luogu]P1631序列合并-堆排的套路运用
- 【洛谷】P1628 合并序列
- 洛谷1631 序列合并
- 洛谷 堆专题 序列合并
- 序列合并 洛谷1631 堆
- 序列合并
- 面试问题spring boot自动配置是怎么实现的
- 100. Same Tree
- Oracle11g 安装过程出现提示:未找到文件 D:\app\Administrator\product\11.2.0\dbhome_2\owb\external\oc4j_applications
- 初识kotlin实现一个类似烟花效果的自定义view
- 【20170926】C语言每日一练
- 洛谷 P1631 序列合并
- App在appstore下架的方法
- SpringBoot入门:(2)jpa方式操作数据库
- Lucene技巧分析
- 注解式框架--Butterknife的使用
- IAR 问题集
- 关于在caddy环境下,使用https协议UC无法下载的解决方法。
- 树莓派spi超频的方法
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)