CF 222D Olympiad 双指针

    xiaoxiao2021-03-25  88

    题目链接:这里 题意:第一行给出两个个数字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; }
    转载请注明原文地址: https://ju.6miu.com/read-26500.html

    最新回复(0)