社区讨论

98pts, WA#8 求助

B3903[NICA #3] 星空(Hard Version)参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mlnvxawm
此快照首次捕获于
2026/02/15 23:13
4 天前
此快照最后确认于
2026/02/16 20:04
3 天前
查看原帖
rt。
本人已经ac 调了2个小时代码,#8仍然过不了。经过逼问ai之后发现代码中这段有问题:
CPP
if(black>white+1){
	cout<<0;
	return 0;
}
if(grey==0){
	cout<<P(white,white)*P(white+1,black)%mod;
	return 0;
}
ull ans1=P(white,white)*P(white+1,black)%mod;
assert(white-black>=0);
ull ans2=fac[white+grey-black]*invfac[white-black]%mod;
cout<<ans1*ans2%mod;
(关于 black white grey 是什么,请见第一篇题解,我因为没思路看了他的思路)
ans2 想算的就是题解中公式的后半部分。
然后意识到 white-black 有可能是-1,这么做就会导致 RE(然而没有segmentation fault,而是以wa出现,这很有迷惑性)
于是改成了最基础的for循环求和,然后过了。
但是题解代码为什么能过??
附上题解代码相关片段:
CPP
if(k1>k3+1) cout << 0;
else if(k2 == 0) cout << 1ll * jc[k3] * jc[k3+1] % mod * inv[k3+1-k1] % mod;
else cout << 1ll * jc[k3] * jc[k3+1] % mod * inv[k3+1-k1] % mod * jc[k3-k1+k2] % mod * inv[k3-k1] % mod;
其中k1=black, k2=grey, k3=white。
也出现了 inv[k3-k1] 的情况,照理说也应该过不了#8,但是我试了一下是可以过的。 这不公平诶(
求各位大神帮一下这个蒟蒻qwq 谢谢!!

回复

6 条回复,欢迎继续交流。

正在加载回复...