2 条题解

  • 0
    @ 2026-4-2 11:30:59

    由于必须用两根相等的红色和一根蓝色,因为蓝色+红色一定大于红色,我们只需要考虑两根红色的长度是否大于蓝色(必须满足三角形不等式);那么就是2*a[l]>b[r] 如果不满足,l++ , 否则配对

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n;
    int a[200100],b[200100];
    signed main(){
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        for(int i=1;i<=n;i++)cin>>b[i];
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        int ans=0;
        int l=1,r=1;
        while(l<=n&&r<=n){
        if(2*a[l]>b[r]){
            //cout<<"debug"<<a[l]<<" "<<b[r]<<endl;
            ans++;
            l++;
            r++;
        }
        else l++;
        }
        cout<<ans;
    }
    

    信息

    ID
    15
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    193
    已通过
    78
    上传者