题目链接:这里 题意:第一行给出两个个数字k和n,第二三行分别有k个数字,求将第二、三行之间的数字相互组合,求最多有多少个组合的和不小于n 解法:将两行数字分别排序,用双端指针分别从头和尾查找最多有多少组合。 代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn =
1e5+
7;
int n, x, a[maxn], b[maxn], c[maxn];
int main()
{
scanf(
"%d%d", &n, &x);
for(
int i =
1; i <= n; i++)
scanf(
"%d", &a[i]);
for(
int i =
1; i <= n; i++)
scanf(
"%d", &b[i]);
sort(a+
1, a+n+
1);
sort(b+
1, b+n+
1);
int cnt = n, ans =
0;
for(
int i =
1; i <= n; i++){
if(a[i] + b[cnt] >= x) cnt--;
}
ans = n - cnt;
cnt = n;
for(
int i =
1; i <= n; i++){
if(a[cnt] + b[i] >= x) cnt--;
}
ans = max(ans, n - cnt);
printf(
"1 %d\n", ans);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-26500.html