萌新刚学数学,关于计数去重正确性
查看原帖
萌新刚学数学,关于计数去重正确性
367190
LemonLime楼主2020/11/18 20:00

关于去重部分。

std 的做法是直接把重复的情况单独算出来再减去。而我的做法是在计算的时候将两次重复的情况各算一半。为什么我的会过不了样例/kk。

代码如下:

void solve(void)
{
    register int ans1=0,ans2=0;
    for(register int i=0;i<=min(k,n);i++)
        if((i^k^1)&1)
        {
            if(((n-i)^k^1)&1)   ans1=(1ll*C(n,i)*inv[2]%MOD+ans1)%MOD;
            else    ans1=(1ll*ans1+C(n,i))%MOD;
        }
    for(register int i=0;i<=min(k,m);i++)
        if((i^k^1)&1)
        {
            if(((m-i)^k^1)&1)   ans2=(1ll*C(m,i)*inv[2]%MOD+ans2)%MOD;
            else    ans2=(1ll*ans2+C(m,i))%MOD;
        }
    printf("%lld\n",1ll*ans1*ans2%MOD);
}
2020/11/18 20:00
加载中...