2020.01.19【NOIP提高组】模拟B 组——总结——数字排序

该博客介绍了NOIP提高组模拟比赛中的一道题目,涉及数字排序问题。给定数列A和B,计算两数列对应元素相乘后的非递减排序数列,并找到第k个数。题目对输入输出格式、数据约束进行了详细说明,博主给出了暴力解法和优化后的二分查找解法,适用于解决大规模数据问题。
摘要由CSDN通过智能技术生成

Description

给你两个数列A=(a1,a2,a3,…,an)和B=(b1,b2,b3,…,bm),把ai (1<=i<=n)和bj (1<=j<=m)乘起来,得到一个新的有m*n个数的数列。把这个序列排列成非递减数列,然后请找出排在第k位的数。

Input

输入有多组数据。
每组数据的第一行包含三个整数:n(1<=n<=10000), m(1<=m<=10000), k(1<=k<=m*n).
第二行包含n个整数,表示数列A。
第三行包含m个整数,表示数列B。
所有数列A和B里的数字范围是 [0, 10000].
每组数据之后有一个空行。

Output

每组数据输出一行,为答案。

Sample Input

1 3 3
1
3 2 1

3 3 7
1 2 3
1 2 3

Sample Output

3
6

Data Constraint

对于所有数据,1<=n<=10000,1<=m<=10000,1<=k<=m*n,0<=ai<=10000, 0<=bj<=10000。

赛时

暴力

正解

二分套二分,先二分个mid为答案,然后check一下,看其是的位置是不是>=k,若是,r=mid-1,ans=mid,否则,l=mid+1;

之后check先枚举个i从1到n,用a[i]去乘b的每一个数,若小于x(check(int x)),则x的位置就+1。

但显然也会爆,所以b数组也来个二分,就Ok了

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int n,m,k,l,r,mid,ans,a[10007],b[10007];

inline 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值