visit

由于一些不可预知的错误导致我一直WA 错误最后说

思路

方案一

假设终点在出发点右上方(这样假设只是为了方便)

假设向左走了a步,向右下了b布,那么相应的我们要向右走m+a,向上n+b步

总步数t 所以由多重集方案数可得

$ \frac{t !}{a !\times b! \times (n+a)! \times (m+b)!}$

这种方法要特殊处理

方案二

假设向上下一共走了i步

如果i超出了范围我们要往回走(i-n)/2步(自己在纸上画一下)

然后如果i-n除不开2那么这种情况是无解的

左右同理

得到式子

$ans=\sum\limits_{i=n 2|i-n}^{t-m} C_{t}^{i}\times C_{i}^{\frac{i-n}{2} }\times C_{t-i}^{\frac{t-i-m}{2}}$

因为模数不一定为质数,但是几个质数乘积,所以我们要用先求出来分别模这几个质数结果,然后CRT合并

我犯的错误

我一开始看了吴迪的式子($ \frac{t !}{a !\times b! \times (n+a)! \times (m+b)!}$),他的式子会发生另外一些不可预知的错误,模小数时他的式子会爆炸($n!$中$n$比模数大时会发生另外一些错误)

然后我一开始没发现这个错误,发现他的式子跟我的差不多就开始打了,然后我就挂了。

然后我又自己推了一个式子用线性求逆元发现还是一直WA

最后wwb调了很长时间还是WA 最后进行了一番大改终于A了。

我用老套路控制变量(用A的代码一段一段替换WA的代码)发现线性求逆元爆炸了。

这里线性求逆元并不是我写错了,或者推错了

        jie[0]=1;
        ni[0]=1;
        for(ll j=1;j<=t;j++)
            jie[j]=jie[j-1]*j%w[i];
        ni[t]=meng(jie[t],w[i]-2,i);
        for(ll j=t-1;j>=1;j--)
            ni[j]=ni[j+1]*(j+1)%w[i];

观察这段代码,首先如果jie里的j比w大那么他的阶乘取完模之后都为0,(前面有不是0的阶乘)

而ni 从t开始算的话如果最后一位为0那么这样递推算出来所有的逆元都为0

然而ni<w的一部分不是0 所以就错了

警醒

猜你喜欢

转载自www.cnblogs.com/znsbc-13/p/11233056.html