题目链接:这里
题意:第一行给出两个个数字k和n,第二三行分别有k个数字,求将第二、三行之间的数字相互组合,求最多有多少个组合的和不小于n
解法:将两行数字分别排序,用双端指针分别从头和尾查找最多有多少组合。
代码:
//CF 222D
#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;
}