codeforces 894B
来源:互联网 发布:知豆电动汽车怎么样 编辑:程序博客网 时间:2024/06/06 20:54
题目大意:给定一个m*n的方格,在其中放入1或者-1 使得每行每列的乘积都为K 问有多少种放法
思路:解法其实只有一句话,但是我想说的是,我真的想了很久没有想到这个角度,之前的时候Trader说想复杂了,其实很简单,但我觉得并不是的,并不是想复杂了的问题,而是角度的切入有问题,我之前一直想不出来是因为我一直在想怎么样能够找到一个公式来表示某一种合理排列的情况,而事实是,我不需要知道怎么一步一步得到一个合理排列,里面的任意一种排列我可以找到一种方法来控制其乘积就好了。
这个题我们对于一个图来说前M-1列和N-1行可以任意排,只要留下一行一列来控制他的最后的乘积就可以了,所以最后的结果是
然后有一个特例要判断一下,就是k =-1时,nm同奇偶
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include<bitset>#include<cstdlib>#include<cmath>#include<set>#include<list>#include<deque>#include<map>#include<queue>using namespace std;typedef long long ll;const double PI = acos(-1.0);const double eps = 1e-6;const int INF = 0x3f3f3f3f;const long long inf =1e18;const int maxn = 1e5+50;const int mod =1e9+7;ll T,n,m;ll qpow(ll a, ll b){ ll res=1,base=a; while(b) { if(b&1)res=(res*base)%mod; base=(base*base)%mod; b=b>>1; } return res;}int k;void solve(){ if(k==-1) { if((n%2)!=(m%2)) { printf("0\n"); return ; } } ll p1=qpow(2,n-1); ll p2=qpow(p1,m-1); printf("%I64d\n",p2);}int main(){ scanf("%I64d%I64d%d",&n,&m,&k); solve(); return 0;}
阅读全文
0 0
- codeforces 894B
- codeforces 894B
- codeforces B
- codeforces B
- codeforces B
- codeforces B
- Codeforces 894B. Tell Your World
- CodeForces 626B CodeForces 626B【暴力】
- CodeForces 841B (B) 博弈
- codeforces 134B
- codeforces#98 b
- codeforces 105 div2 B
- Codeforces 166B - Polygons
- codeforces B. Coins
- codeforces----193B Xor
- codeforces----208B Solitaire
- Codeforces 1B - Spreadsheet
- codeforces 214B Hometask
- PAT Basic 1027
- Java基础知识梳理--线程
- mysql的查询、子查询及连接查询
- Linux系统LCD驱动架构分析
- Python爬虫学习纪要(八):Requests 库学习笔记3
- codeforces 894B
- 怎么获取到View的位置View.getLocationInWindow()的为0
- Java基础知识梳理--IO
- tensorflow初学代码系列一(基于莫烦视频)
- 实验5 哈夫曼树
- 引用类型(数组)
- 多线程新浪新闻搜索网络爬虫-基于关键字
- Linux学习6:文件打包与压缩
- LeetCode刷题(45)--Remove Duplicates from Sorted List