由于一些不可预知的错误导致我一直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 所以就错了
警醒