1 条题解

  • 0
    @ 2023-10-12 20:24:45
    #include <bits/stdc++.h>
    using namespace std;
    
    
    long long qpow(long long a, long long b, long long p)
    {
        long long cur=a,ans=1;
        while (b>0)
        {
            if (b&1) ans*=cur,ans%=p;
            b>>=1;
            cur*=cur,cur%=p;
        }
        return ans;
    }
    
    long long inv(long long a, long long p)
    {
        return qpow(a,p-2,p);
    }
    
    #define N 2000007
    long long fac[N],rfac[N];
    const long long mod = 1e9 + 7;
    long long C(long long a, long long b, long long p)
    {
        if (a<b) return 0;
        
        unsigned long long res = fac[a];
        res *= rfac[a-b];
        res %= p;
        res *= rfac[b];
    
        return res % p;
    } 
    
    void setFac(int n, int p)
    {
        long long res=1;
        fac[0]=1;
        rfac[0]=1;
        for (int i=1; i<=n; i++)
            fac[i] = (fac[i-1] * i) % p;
    
        rfac[n] = inv(fac[n], p);
        
        for (int i=n-1; i>0; i--)
            rfac[i] = (rfac[i+1] * (i+1)) % p;
    }
    int a[N];
    
    long long getFactor(int k, int x, int y)
    {
        if (y==0) return 0;
        return C(k-1+y-x, k-1, mod);
    }
    
    int main()
    {
        int n,t; cin >> n >> t;
        setFac(N, mod);
        
        for (int i=0;i<n;i++)
            cin >> a[i];
    
        for (int i=0;i<t;i++)
        {
            int k,l,r; cin >> k >> l >> r;
            
            long long ans = 0;
            for (int i=0;i<n;i++)
                ans += (getFactor(k+1, i+1, r) - getFactor(k+1, i+1, l-1)) * a[i] % mod,
                ans %= mod;
            
            cout << ans << endl;
        } 
        
        return 0;
    }
    
    
  • 1

信息

ID
1516
难度
9
分类
(无)
标签
(无)
递交数
36
已通过
2
通过率
6%
上传者