1 条题解
-
0潘周骜 (EL230807) LV 8 @ 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%
- 上传者