题目链接:点击查看

题目大意:给出一个 n * m 的棋盘,需要在棋盘内填充数字,使得每一行、每一列的乘积都等于 k,问有多少种方案

题目分析:因为 k 只可能是 1 或 -1,所以在棋盘内填充的数字无非也只有两种

首先需要特判一种特殊情况,就是 n 和 m 的奇偶性不同,且 k 为 -1,此时我们假设 n 为奇数,m 为偶数。因为 k 为 -1,所以每一行、每一列 -1 的个数必须为奇数个才行,所以对于行来说,共有(奇数 * 奇数)个 -1,而对于列来说,共有(奇数 * 偶数)个 -1,相互矛盾,故此时的答案为 0

剩下的情况肯定都是有解的了,具体想法如下,每次可以空出来最后一行和最后一列的元素先不填,然后让剩下的 ( n - 1 ) * ( m - 1 ) 个格子随便填充,最后用最后一列和最后一行来中和 -1 的个数即可,可以证明这是可行的且只有唯一一种情况与其对应

所以最后答案就是 

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;const int mod=1e9+7;LL q_pow(LL a,LL b)
{LL ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);LL n,m,k;scanf("%lld%lld%lld",&n,&m,&k);if(((n+m)&1)&&k==-1)puts("0");elseprintf("%lld\n",q_pow(q_pow(2,m-1),n-1));return 0;
}

CodeForces - 894B Ralph And His Magic Field(组合数学+思维)相关推荐

  1. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学

    题目链接 题意:给你三个数n,m,k;让你构造出一个nm的矩阵,矩阵元素只有两个值(1,-1),且满足每行每列的乘积为k,问你多少个矩阵. 解法:首先,如果n,m奇偶不同,且k=-1时,必然无解: 设 ...

  2. 【Codeforces 869 C The Intriguing Obsession】 组合数学 思维

    C. The Intriguing Obsession time limit per test1 second memory limit per test256 megabytes inputstan ...

  3. 【codeforces 711B】Chris and Magic Square

    [题目链接]:http://codeforces.com/contest/711/problem/B [题意] 让你在矩阵中一个空白的地方填上一个正数; 使得这个矩阵两个对角线上的和; 每一行的和,每 ...

  4. Codeforces Contest 1110 problem E Magic Stones —— 更改算式

    Grigory has n magic stones, conveniently numbered from 1 to n. The charge of the i-th stone is equal ...

  5. Codeforces 979E Kuro and Topological Parity - 动态规划 - 组合数学

    题目传送门 传送点 题目大意 给定$n$个标号依次为$1, 2, \cdots, n$的点,其中一些点被染成一些颜色,剩下的点没有染色.你需要添加一些有向边并将剩下的点染色,满足有向边从编号小的一端指 ...

  6. CodeForces - 1366E Two Arrays(组合数学+思维)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列 a ,再给出一个长度为 m 的序列 b ,题目保证序列 b 是严格递增的,我们需要将 a 分割成恰好 m 段,使得每一段的最小值恰好等于 b[ ...

  7. CodeForces - 1284C New Year and Permutation(组合数学+思维)

    题目链接:点击查看 题目大意:首先定义名词"排列"的意思是,一段数列中的数字升序排序后可以组成连续的一段数列,换句话说,满足一段区间内的最大值-最小值=r-l则称这个区间的数列为& ...

  8. Permutation Partitions CodeForces - 1326C(组合数学+思维)

    You are given a permutation p1,p2,-,pn of integers from 1 to n and an integer k, such that 1≤k≤n. A ...

  9. CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)

    题意:一张有向图,每条边上都有wi个蘑菇,第i次经过这条边能够采到w-(i-1)*i/2个蘑菇,直到它为0.问最多能在这张图上采多少个蘑菇. 分析:在一个强连通分量内,边可以无限次地走直到该连通块内蘑 ...

最新文章

  1. Java中正则表达式的学习
  2. WebStorm配置本地测试服务器
  3. pytorch加载预训练模型_Pytorch-Transformers 1.0发布,支持六个预训练框架,含27个预训练模型...
  4. js get请求_URL解析、HTTP请求以及浏览器和爬虫得到响应的区别
  5. PowerDesigner使用总结(转)
  6. Mistakes(Updating)
  7. 向量点乘 推导及应用
  8. Linux学习日记——源码编译Apache
  9. 工作277:v-model实战
  10. 搭建ceph单节点对象存储服务器
  11. 面向机器学习的特征工程 三、文本数据: 展开、过滤和分块
  12. 最佳圆角字体,设计师的最爱
  13. 在 ASP.NET Web 部件应用程序中使用服务器控件
  14. ibm语音识别输入系统
  15. RSA解密Matlab,RSA加密算法--matlab
  16. 【每日算法Day 102】美团 AI 平台算法工程师面试编程题
  17. 如何使用DotfuscatorPro_4.9对软件进行加密
  18. arcgis注册dsoframer.ocx等组件
  19. 京瓷Kyocera TASKalfa 3051ci 一体机驱动
  20. 如何用idea开发vue

热门文章

  1. MySQL高级show profile
  2. 什么时候用不到索引?
  3. 初步认识Volatile-CPU层面的内存屏障
  4. BaseExecutor.query()-清空本地缓存
  5. MybatisPlus实现条件查询
  6. Hive的安装-Hive配置
  7. 数据库-优化-数据库结构的优化-拆分优化
  8. 数据库-事务并发操作问题及并发的控制
  9. Spring Boot整合@Cacheable注解使用
  10. 建造者模式源码解析(jdk-guava+mybatis)