题解 CF894B 【Ralph And His Magic Field】

Hexarhy

2021-01-09 10:39:25

Solution

### Preface 适合新手(指我)的计数题。 ### Solution 其实想到核心就很简单了:**一行/列的正负号可以只由一个格子决定。** 于是我们可以保留最后一行和最后一列来调整结果,剩余的格子只需要在 $\pm 1$ 里随便选就好了。 因此答案就是: $$2^{(n-1)(m-1)}$$ 当然得分开成 $(2^{n-1})^{m-1}$ 算,指数会爆 `long long`,而且别算成了 $2^{n-1}\times 2^{m-1}$。 **但是**,最右下角的格子需要同时调整一行和一列的正负性,因此可能会出现无解的情况。手玩一下不难发现,当满足 $|n-m|$ 是奇数的时候,矩阵一定不能满足 $k=-1$,输出 $0$ 即可。 ### Code ```cpp int main() { cin>>n>>m>>k; if(abs(n-m)&1 && k==-1) ans=0; else ans=qpow(qpow(2,n-1),m-1); cout<<ans<<endl; return 0; } ```