cogimyunの小窝

Loading...

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;
}
posted @ 2026-01-08 07:25  cogimyun  阅读(2)  评论(0)    收藏  举报