样例部分没通过求助
查看原帖
样例部分没通过求助
507348
__vector__楼主2022/4/9 22:58

我不知道哪里错了,样例中较小的部分没过,较大的部分反而过了。由于一些原因我明天8:30之前必须 AC,急求助。

#include <bits/stdc++.h>
using namespace std;
namespace Main
{
    typedef long long ll;
    const ll mod=1e9+7;
    int t;
    const int maxn = 2005;
    int n,m,k;
    inline int read()
    {
        int x = 0, f = 1;
        char ch = getchar();
        while (!isdigit(ch))
        {
            if (ch == '-')
                f = -1;
            ch = getchar();
        }
        while (isdigit(ch))
        {
            x = (x << 1) + (x << 3) + (ch ^ 48);
            ch = getchar();
        }
        return x * f;
    }
    inline ll ksm(ll a,ll b,ll p)
    {
        ll ret=1;
        while(b)
        {
            if(b&1)ret=ret*a%p;
            a=a*a%p;
            b>>=1;
        }
        return ret;
    }
    inline ll ny(ll a,ll p)
    {
        return ksm(a,p-2,p);
    }
    void write(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>=10)write(x/10);
        putchar(x%10^48);
    }
    
    ll fact[1000005];
    inline ll C(ll n,ll m)
    {
        if(n<m)return 0;
        return fact[n]*ny(fact[m],mod)%mod*ny(fact[n-m],mod)%mod;
    }
    inline void solve()
    {
        n=read();
        m=read();
        k=read();
        ll ans=0;
        for(ll i=1;i<=m;i++)
        {
            ans+=k*i*C(n-i-1,m-i)%mod*ny(1<<(n-i),mod)%mod;
            ans%=mod;
        }
        printf("%lld\n",ans);
    }
    void main()
    {
        fact[0]=1;
        for(int i=1;i<=1000000;i++)
        {
            fact[i]=fact[i-1]*(ll)i;
            fact[i]%=mod;
        }
        t=read();
        while(t--)
        {
            solve();
        }
        #ifndef ONLINE_JUDGE
        system("pause");
        #endif
    }
}
int main()
{
    Main::main();
    return 0;
}
2022/4/9 22:58
加载中...