#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define int long long
const int Mod = 1e9 + 7;
const int N = 105;
int frac[N+5],inv[N+5],n,m,k;
int u[N],r[N],S[N],ans;
int suf[N<<4],pre[N<<4],Y[N<<4];
inline int read() {
int x=0,ff=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')
ff=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*ff;
}
inline int power(int x,int y) {
int rel = 1;
for(;y;y >>= 1) {
if(y & 1) rel = rel * x % Mod;
x = x * x % Mod;
}
return rel;
}
inline int C(int x,int y) {
if(x < y) return 0;
return frac[x] * inv[y] % Mod * inv[x-y] % Mod;
}
void prework() {
frac[0] = frac[1] = 1;
for(int i = 2;i <= n;i++) frac[i] = frac[i-1] * i % Mod;
inv[n] = power(frac[n],Mod-2) % Mod;
for(int i = n-1;i >= 0;i--) inv[i] = inv[i+1] * (i+1) % Mod;
}
inline int calc(int x,int cs) {
int now = Y[x];
int Inv = 1;
now = now * pre[x-1] % Mod * suf[x+1] % Mod;
Inv = frac[x-1] % Mod * frac[cs-x] % Mod;
if((cs - x) & 1) Inv = Inv * (-1);
Inv = (Inv + Mod) % Mod;
now = now * power(Inv,Mod-2) % Mod;
return now;
}
signed main () {
n = read();m = read();k = read();
for(int i = 1;i <= m;i++) u[i] = read();
for(int i = 1;i <= m;i++) r[i] = read();
prework();
for(int i = 1;i <= m;i++) {
S[i] = 0;
for(int j = 0;j < r[i];j++) {
int ff = 1;
if(j & 1) ff = -1;
int ret = 0;
memset(Y,0,sizeof(Y));
pre[0] = 1;suf[n+j-r[i]+3] = 1;
for(int K = 1;K <= (n+j-r[i]+2);K++) Y[K] = Y[K-1] + power(K,n+j-r[i]) % Mod;
for(int K = 1;K <= (n+j-r[i]+2);K++) pre[K] = pre[K-1] * (u[i]-K) % Mod;
for(int K = (n+j-r[i]+2);K >= 1;K--) suf[K] = suf[K+1] * (u[i]-K) % Mod;
for(int K = 1;K <= (n+j-r[i]+2);K++) {
ret = (ret + calc(K,n+j-r[i]+2)) % Mod;
ret = (ret + Mod) % Mod;
}
S[i] = (S[i] + (ff * C(r[i]-1,j) % Mod * power(u[i],r[i]-j-1) % Mod * ret + Mod) % Mod) % Mod;
}
}
for(int i = k;i <= n-1;i++) {
int ff = 1;
if((i-k) & 1) ff = -1;
int F = C(n-1,i);
for(int j = 1;j <= m;j++) {
F = F * C(n-i-1,n-r[j]-i) % Mod * S[j] % Mod;
}
ans = (ans + (ff * C(i,k) % Mod * F % Mod + Mod) % Mod) % Mod;
}
printf("%lld\n",ans);
return 0;
}
我在做这道题的时候,在luogu上50分,在LOJ上交连样例都没过,但是我复制样例到IDE里跑出来的是对的, 并且用Luogu IDE结果也是对的。蒟蒻非常地疑惑,有大佬能解答一下吗?