B - Ralph And His Magic Field CodeForces - 894B -思维-快速幂

本文解析了CodeForces-894B问题,即Ralph和他的魔法场,探讨如何在n*m的矩阵中放置1或-1,使每行每列的乘积等于给定的K值(1或-1)。文章提供了详细的解题思路与C++代码实现,解释了如何通过计算合法状态下的组合数得出答案。
  • 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;
    }

     

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值