当前位置: 首页 > news >正文

Solutions P10417 [蓝桥杯 2023 国 A] 第 K 小的和

思路

\(K\) 小的和显然具有单调性:给一个阈值 \(x\),满足 \(A_i+B_j\le x\) 的对数只会随着 \(x\) 增大而增大,所以我们二分答案这个 \(x\) 即可。关键就是怎么写 check。

check

先把 \(B\) 排序。对每个 \(A_i\),令 \(t=x-A_i\),那么这一行能配的就是 \(B_j\le t\) 的个数,直接 upper_bound(B,t) 拿到位置就是 \(cnt_i\)。把所有 \(cnt_i\) 累加得到 \(cnt\)。如果 \(cnt\ge K\) 就说明第 \(K\)\(\le x\),check 返回 true(顺便 cnt 到 \(K\) 直接提前返回,省常数)。

auto ok = [&](ll x) -> bool {ll cnt=0;for(int i = 0;i < n; i++){ll t = x - A[i];auto it = upper_bound(B.begin(),B.end(),t);ll cnt_i=it-B.begin();cnt += cnt_i;if(cnt >= K) return true;}return false;};

实现

排序之后二分答案区间 \([A_1+B_1,;A_n+B_m]\),用找最小 true 的写法即可。

时间复杂度:\(\Theta((n\log n+m\log m)+n\log m\log V)\),其中 \(V\) 是和值域范围

Accepted Code (C++17)

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define i128 __int128
#define ld long double
#define fir first
#define sec second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define lowbit(x) (x&-x)
using namespace std;
const int MOD=998244353;
const int MOD1=1e9+7;
//char ibuf[1<<25],*p1=buf,*p2=buf;
mt19937 mrand(random_device{}());
int rnd(int x){ return mrand() % x;}
ll qpow(ll a,ll b){ll res=1;while(b){if(b&1)res=res*a%MOD;a=a*a%MOD,b>>=1;}return res;}
ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}  
ll lcm(ll a,ll b){ return a/gcd(a,b)*b;}
//C++ 17 -O2
//By MaZhaoze
int main(){ios::sync_with_stdio(0);cin.tie(0);ll n,m,K;cin >> n >> m >> K;vector<ll> A(n),B(m);for(auto &x:A) cin >> x;for(auto &x:B) cin >> x;sort(A.begin(),A.end());sort(B.begin(),B.end());auto ok = [&](ll x) -> bool {ll cnt=0;for(int i = 0;i < n; i++){ll t = x - A[i];auto it = upper_bound(B.begin(),B.end(),t);ll cnt_i=it-B.begin();cnt += cnt_i;if(cnt >= K) return true;}return false;};ll l = 0,r = 2e9;while(l <= r){ll mid = (l + r) / 2;if(ok(mid)){r = mid - 1;}else{l = mid + 1;}}cout << l;return 0;
}
http://www.jsqmd.com/news/418196/

相关文章:

  • 北京植发哪里好?美发博主实测避坑!3类靠谱机构+不踩雷指南 - 品牌测评鉴赏家
  • 头顶脱发别慌!黑米纹发11大优势带你逆袭“高发际线” - 品牌测评鉴赏家
  • 北京植发机构实测推荐|亲测3家,避坑不踩雷,发量王者养成记 - 品牌测评鉴赏家
  • 艾利和 IRIVER D150 韩版拆机更换电池教程(附最新固件地址)
  • 艾利和 IRIVER D150 韩版拆机更换电池教程
  • 掉发严重别慌!植发不是唯一解,黑米纹发11大优势让你告别秃烦恼 - 品牌测评鉴赏家
  • 大面积脱发救星!别盲目植发了,纹发才是普通人的最优解 - 品牌测评鉴赏家
  • 植发vs纹发 11大维度硬核对比!脱发星人别再选错了 - 品牌测评鉴赏家
  • 植发原理彻底讲透!脱发党别盲目跟风,纹发或许更适合你 - 品牌测评鉴赏家
  • 【3 月小记】Part 1: Re: 树形 DP - L
  • 计算机毕业设计springboot在线答疑系统的设计与实现 基于SpringBoot的智能化课程辅导系统的设计与实现 基于SpringBoot的师生实时问答交流平台的设计与实现
  • 植发失败别崩溃,纹发为你指新道 - 品牌测评鉴赏家
  • Claude Code Skills |(1)安装使用指南(2026最新)
  • 2026.2.27
  • 计算机毕业设计springboot基于+大数据技术的中医康养预约系统 智慧中医药健康服务管理平台 传统医学康养诊疗一体化系统
  • Claude Code Skills |(2)开发进阶指南(2026最新)
  • Qt的控件 之二
  • NPM digital envelope routines::unsupported
  • 【100%通过率】华为OD机试真题2026双机位C卷 JavaGo 实现【加密算法】
  • 搜维尔科技:Tesollo隆重推出5指20自由度灵巧手DG-5F-S
  • 访问控制矩阵
  • [WX]微信注册微信小程序 — — 2026最新版保姆级教程
  • MyBatis-Plus 的动态SQL片段用法
  • BUUCTF_Basic_BUU SQL COURSE 1(sql注入)
  • Qt的控件 之一
  • Dify搭建文本生成应用
  • 使用playwright实现web自动化
  • 同步包风暴
  • 2026年2月金融科技平台创新实践解析:主流平台技术突破盘点 - 速递信息
  • SSLTLS协议