1 条题解

  • 0
    @ 2025-10-8 16:51:35
    #include<bits/stdc++.h> 
    using namespace std;
    const int N=1e5+10;
    int a[N];
    int findmax(int l, int r, int x)
    {
        if(x < a[l]) return 0;
        while(l + 1 < r)
        {
            int mid = (l + r) >> 1;
            if(a[mid] <= x) l = mid;
            else r = mid;
        }
        return l;
    }
    int main()
    {
        int n, K; scanf("%d%d", &n, &K);
        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
        a[++n] = 0;
        sort(a + 1, a + n + 1);
        long long ans = 0;
        for(int i = 2; i <= n; i++)
        {
            int p = findmax(1, i, K - a[i]); if(p == 0) break;
            ans += p;
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    • 1

    信息

    ID
    284
    时间
    100ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    370
    已通过
    100
    上传者