-
B - Ralph And His Magic Field
CodeForces - 894B - 题意:n*m的矩阵每个点可以放1或-1,输入n,m,k,,使得每一行中所有元素的乘积为K。
- 每一列中所有元素的乘积为K,K只可能是+1或-1,问有多少种方案。
- 思路:先找到非法情况 行数列相加 如果是奇数 并且K=-1此时为非法可以写几个实例了解一下
- 合法状态呢,每一行中 有m-1个是随便放的,然后这m-1的结果与K比较一下用最后一个来凑成K
- 列也类似,有n-1个是随便放的,最后一个来凑一下结果为K即可。结果数就是(2^m-1)^n-1
-
#include<bits/stdc++.h> using namespace std; #define maxn 123456 #define ll long long ll n,m,ans,k,mod=1000000007; ll qpow(ll a,ll b) { ll lhk=1; while(b) { if(b%2)lhk=(lhk*a)%mod; b/=2; a=(a*a)%mod; } return lhk; } int main() { scanf("%lld%lld%lld",&n,&m,&k); if((n+m)%2&&k==-1) { printf("0\n"); return 0; } ans=qpow(qpow(2,n-1),m-1); printf("%lld\n",ans); return 0; }
B - Ralph And His Magic Field CodeForces - 894B -思维-快速幂
最新推荐文章于 2020-11-26 16:59:13 发布
本文解析了CodeForces-894B问题,即Ralph和他的魔法场,探讨如何在n*m的矩阵中放置1或-1,使每行每列的乘积等于给定的K值(1或-1)。文章提供了详细的解题思路与C++代码实现,解释了如何通过计算合法状态下的组合数得出答案。

209

被折叠的 条评论
为什么被折叠?



