God Qing's circuital law

题目地址

题解:
A.突破口:已知老大的value,求出保证老大最大的其他boy能选择的女孩个数。

小A->2 小B->4 小C->5 方法总数怎么求? 先放少的保证后面一定有的放。2*(4-1)*(5-2)方法种数。

排序过后:先求出来的种数一定多就有规律可循了。

    #include<bits/stdc++.h>
    using namespace std;

    #define rep(a,b) for(int i=a;i<=b;i++)
    #define red(a,b) for(int i=a;i>=b;i--)
    #define ULL unsigned long long 
    #define LL long long 


    const LL MOD = 1e9+7;
    LL boy[20000];
    LL girl[20000];
    
    LL ans=0;
    vector<LL>v;
    int main()
    {
        int n;cin>>n;
        rep(1,n)cin>>boy[i];
        rep(1,n)cin>>girl[i];
        LL base=boy[1];
        sort(boy+1+1,boy+1+1+n-1); 
        sort(girl+1,girl+1+n);
        /*for(int i=2;i<=n;i++)
        cout<<boy[i]<<" ";
        cout<<endl;
        for(int i=1;i<=n;i++)
        cout<<girl[i]<<" ";
        cout<<endl;*/
        for(int i=1;i<=n;i++)
        {
            LL temp=base*girl[i];
            LL p=1;
            for(int j=2;j<=n;j++)
            {
                LL q=0;
                for(int k=1;k<=n;k++)
                 if(girl[k]*boy[j]<temp&&k!=i)q++;
                //cout<<boy[j]<<" "<<q<<endl;
                if(q-(n-j)>0)
                p=(p*(q-(n-j)))%MOD;
                else p=0;
            }
            ans=(ans+p)%MOD;
        } 
        cout<<ans<<endl;
        system("pause");
    }

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值