| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38799 | LYLAKIOIAKIOI | 【S】T2 | C++ | 运行超时 | 60 | 1000 MS | 4956 KB | 1736 | 2025-10-29 15:12:34 |
#include<bits/stdc++.h> using namespace std; const int N=3e5+10,mod=1e9+7; void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} int qp(int a,int b){ int x=1; while(b){ if(b&1) x=1ll*x*a%mod; b>>=1;a=1ll*a*a%mod; }return x; } int n,m; int f[22][22],g[22][22]; int pre[N],suf[N],fac[N],inv[N]; int C(int u,int d){ if(u<0||d<0||u<d) return 0; return 1ll*fac[u]*inv[d]%mod*inv[u-d]%mod; } void init(int l,int r,int up,int down){ if(l>r) return g[up][down]++,void(); int mid=(l+r)/2;f[up][down]++; init(l,mid-1,up+1,down); init(mid+1,r,up,down+1); } int main(){ //freopen("binary.in","r",stdin); //freopen("binary.out","w",stdout); cin>>n>>m;init(1,n,0,0); fac[0]=1;for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod; inv[n]=qp(fac[n],mod-2);for(int i=n-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod; for(int i=1;i<=n;i++) pre[i]=(pre[i-1]+i)%mod;for(int i=n;i>=1;i--) suf[i]=(suf[i+1]+i)%mod; for(int i=1;i<=m;i++){ int x;cin>>x;int ans=0; int lo=x-1,hi=n-x; for(int a=0;a<=18;a++){ for(int b=0;b<=18;b++){ int valf=1ll*fac[a]*fac[b]%mod*fac[n-1-a-b]%mod*f[a][b]%mod; Add(ans,1ll*valf*x%mod*C(hi,a)%mod*C(lo,b)%mod); Add(ans,1ll*valf*pre[x-1]%mod*C(hi,a)%mod*C(lo-1,b-1)%mod); Add(ans,1ll*valf*suf[x+1]%mod*C(hi-1,a-1)%mod*C(lo,b)%mod); int valg=1ll*fac[a]*fac[b]%mod*fac[n-a-b]%mod*g[a][b]%mod; Add(ans,1ll*valg*pre[x-1]%mod*C(hi,a)%mod*C(lo-1,b-1)%mod); Add(ans,1ll*valg*suf[x+1]%mod*C(hi-1,a-1)%mod*C(lo,b)%mod); } }cout<<ans<<endl; } return 0; }