Luogu P2675 《瞿葩的数字游戏》T3-三角圣地 题解
我们不难发现这个倒三角其实就是一个倒过来的杨辉三角,第一层的第 \(i\) 个数对于底部贡献为 \(\binom{n-1}{i-1}\),意味着中间贡献大于两边,所以考虑贪心将大的数放在中间,小的数放在两边即可,由于模数 \(mod=10007\) 较小,所以要套上 Lucas 定理计算组合数,时间复杂度为 \((mod \log mod+n \log_{mod} n)\)。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e4+7;
int n,init[10010],inv[100010];
int power(int x,int y){
int res=1;
while(y){
if(y&1)res=res*x%mod;
x=x*x%mod;y>>=1;
}
return res;
}
int c(int x,int y){if(x<y)return 0;return init[x]*inv[y]%mod*inv[x-y]%mod;}
signed main(){
init[0]=inv[0]=1;
for(int i=1;i<=mod;i++)init[i]=init[i-1]*i%mod,inv[i]=power(init[i],mod-2);
cin>>n;
int ans=0;
for(int i=1;i<=n;i+=2){
if(i!=n)ans=(ans+c((n-1)/mod,i/2/mod)*c((n-1)%mod,(i/2)%mod)%mod*(i+1)%mod)%mod;
ans=(ans+c((n-1)/mod,i/2/mod)*c((n-1)%mod,(i/2)%mod)%mod*i%mod)%mod;
}
cout<<ans;
return 0;
}

浙公网安备 33010602011771号