题目链接:这里
题意:第一行给出两个个数字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;
}