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;
    }
    
    • 0
      @ 2026-3-15 17:41:36
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      ll T=1;const ll N=2e5+5;
      ll n,x,y;
      ll pre[N];ll a[N];ll ans=0;ll k;ll b[N];
      void solve(){
      	cin>>n;for(ll i=1;i<=n;++i){
      		cin>>a[i];a[i]=a[i]*2;
      	}
      	for(ll i=1;i<=n;++i)cin>>b[i];
      	sort(a+1,a+1+n);sort(b+1,b+1+n);
      	ll l=1;ll r=1;
      	while(l<=n&&r<=n){
      		if(a[l]-b[r]>0){
      			ans+=1;r++;l++;
      		}else{
      			l++;
      		}
      	}cout<<ans;
      	
      }
      
      int main(){
      	
      	while(T--)solve();
      	return 0;
      } 
      
      • 1

      信息

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