专门做门业的网站,潮州东莞网站建设,动漫网站模板下载,小程序开发步骤大全题目描述
给定两个序列 #x1d44e;1,#x1d44e;2,…,#x1d44e;#x1d45b;a1,a2,…,an 与 #x1d44f;1,#x1d44f;2,…,#x1d44f;#x1d45b;b1,b2,…,bn#xff0c;请从这两个序列中分别各找一个数#xff0c;要求这两个数的差不超过给…题目描述
给定两个序列 1,2,…,a1,a2,…,an 与 1,2,…,b1,b2,…,bn请从这两个序列中分别各找一个数要求这两个数的差不超过给定的数字 d且两个数字之和最大
输入格式
第一行两个整数 n 与 d第二行n 个整数 1,2,…,a1,a2,…,an第三行n 个整数 1,2,…,b1,b2,…,bn
输出格式
单个整数两个数的最大和。若没有合适的方案输出 None
数据范围
对于 30%30% 的数据1≤≤2001≤n≤200对于 60%60% 的数据1≤≤200001≤n≤20000对于 100%100% 的数据1≤≤200001≤n≤200001≤≤1091≤d≤1091≤,≤1091≤ai,bi≤109。
样例数据
输入:
3 2 3 1 4 1 5 9
输出:
9
说明:
45
详见代码:
#includebits/stdc.h
using namespace std;
int n;
long long a[200005];
long long b[200005];
long long d;
long long ans0;
int main()
{cinnd;for(int i1;in;i){cina[i];}for(int i1;in;i){cinb[i];}sort(a1,an1);sort(b1,bn1);int bp1;for(int i1;in;i){while((b[bp]a[i]||b[bp]-a[i]d)bpn){bp;}if (b[bp-1]a[i]bp-1nb[bp-1]-a[i]d){ansmax(ans,a[i]b[bp-1]);}}int ap1;for(int i1;in;i){while((a[ap]b[i]||a[ap]-b[i]d)apn){ap;}if (a[ap-1]b[i]ap-1na[ap-1]-b[i]d){ansmax(ans,b[i]a[ap-1]);}}if (ans0){coutNone;}else{coutans;}return 0;
}