codeforces B

来源:互联网 发布:java 模拟浏览器 编辑:程序博客网 时间:2024/04/19 15:20

题意:给你一个n*m的矩阵,矩阵由1或-1组成,然后问你有多少个矩阵的各行各列的乘积都等于k,其中k只能等于1或者-1。

ps:自己现在真的已经是a题选手了 ,一个b题想了巨久。。。

思路:那就是 每行和每列都保留最后一个不填,用来更改那一行那一列的值,其余位置都是想怎么填就怎么填,还有一个就是当n,m一个是奇数一个是偶数的是,如果k是-1那么答案就是0

上代码把:

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;#define mod 1000000007inline int fast_mod(long long a,long long b){long long ans = 1 ;while(b){//printf("b = %lld\n",b);if(b&1) ans=(ans*a)%mod;a = (a*a)%mod;b>>=1;}return ans;}int main(){long long n,m,k;while(cin>>n>>m>>k){//printf("%lld %lld %lld \n",n%2,m%2,k);if(n%2!=m%2&&k==-1){puts("0");}else {int ans = fast_mod(fast_mod(2,n-1),m-1);cout<<ans<<endl;}}}

原创粉丝点击