Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 推规律+证明
2017-11-22 22:51
441 查看
题意:
略;
这个题我是没推出来,想了好久也没想明白,看了题解才会做的,而且我对这个题的想法跟题解一点关系都没有,也就是说思路根本不存在;
那就证明一下这个题的正确性吧
理解:
首先是不存在的这种情况,我们知道,要是 n , m 奇偶性不同,并且 k = -1 是的情况是不存在的
因为:
假设 n 为偶数,m 为奇数,对于每一行合法的话,那么每一行有且只能有奇数个-1,那么-1的总个数就是 n*(奇数)= 偶数;
再看每一列都合法的话,每一列有奇数个-1,那么-1的总个数就是 m *(奇数)= 奇数; 显然矛盾,这时候答案为 0;
另一种情况就是,n m 都比较大的时候,这里相当于把矩阵分成4部分:(假设整个矩阵为(1,1)-(n,m))
①(1,1)-(n-1,m-1)这个矩阵,每个位置可以任意放置 1 或者 -1 (其实答案就在这里,答案就是 2^[ (n-1)*(m-1) ] 了 )
②(n,1)- (n,m-1)相当于最后一行除了最右下角的格子,这一行的每个数的放置 受他所在一列上面的 -1 的个数的制约,视情况放置
③(1,m)- (n-1,m)相当于最后一列除了最右下角的格子,这一列的每个数的放置受他所在一行左边的 -1 的个数的制约,视情况放置
④(n,m)这个格子,受②③两部分的同时制约;
那么问题来了,能否确定(n,m)放上数以后使得最后一行 最后一列同时满足条件呢?答案是肯定的;
①② 和 ①③ 组合,分别使得各自组成的矩阵满足条件(可以自己找例子试试),满足当前条件的话,他们的-1的个数的奇偶性就一样,
而他们又有公共的部分①,那么②③的-1 的个数的奇偶性就一样,就能保证上述问题满足
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 100 + 7, maxd = 670000 + 7;
const ll mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;
int main() {
ll n, m, k;
cin >> n >> m >> k;
if( (n+m) % 2 && k == -1 ) return puts("0")*0;
n--, m--;
n %= (mod-1), m %= (mod-1);
n = (n*m);
ll x = 2, ans = 1;
while(n) {
if(n&1) ans
fd99
= (ans*x) % mod;
x = (x*x) % mod;
n /= 2;
}
cout << ans << endl;
return 0;
}
略;
这个题我是没推出来,想了好久也没想明白,看了题解才会做的,而且我对这个题的想法跟题解一点关系都没有,也就是说思路根本不存在;
那就证明一下这个题的正确性吧
理解:
首先是不存在的这种情况,我们知道,要是 n , m 奇偶性不同,并且 k = -1 是的情况是不存在的
因为:
假设 n 为偶数,m 为奇数,对于每一行合法的话,那么每一行有且只能有奇数个-1,那么-1的总个数就是 n*(奇数)= 偶数;
再看每一列都合法的话,每一列有奇数个-1,那么-1的总个数就是 m *(奇数)= 奇数; 显然矛盾,这时候答案为 0;
另一种情况就是,n m 都比较大的时候,这里相当于把矩阵分成4部分:(假设整个矩阵为(1,1)-(n,m))
①(1,1)-(n-1,m-1)这个矩阵,每个位置可以任意放置 1 或者 -1 (其实答案就在这里,答案就是 2^[ (n-1)*(m-1) ] 了 )
②(n,1)- (n,m-1)相当于最后一行除了最右下角的格子,这一行的每个数的放置 受他所在一列上面的 -1 的个数的制约,视情况放置
③(1,m)- (n-1,m)相当于最后一列除了最右下角的格子,这一列的每个数的放置受他所在一行左边的 -1 的个数的制约,视情况放置
④(n,m)这个格子,受②③两部分的同时制约;
那么问题来了,能否确定(n,m)放上数以后使得最后一行 最后一列同时满足条件呢?答案是肯定的;
①② 和 ①③ 组合,分别使得各自组成的矩阵满足条件(可以自己找例子试试),满足当前条件的话,他们的-1的个数的奇偶性就一样,
而他们又有公共的部分①,那么②③的-1 的个数的奇偶性就一样,就能保证上述问题满足
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 100 + 7, maxd = 670000 + 7;
const ll mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;
int main() {
ll n, m, k;
cin >> n >> m >> k;
if( (n+m) % 2 && k == -1 ) return puts("0")*0;
n--, m--;
n %= (mod-1), m %= (mod-1);
n = (n*m);
ll x = 2, ans = 1;
while(n) {
if(n&1) ans
fd99
= (ans*x) % mod;
x = (x*x) % mod;
n /= 2;
}
cout << ans << endl;
return 0;
}
相关文章推荐
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field(数论,组合数学)
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field(思维)
- 【Codeforces Round #447 (Div. 2) B】Ralph And His Magic Field
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field(数学???)
- Ralph And His Magic Field
- Codeforces894B-Ralph And His Magic Field
- codeforces B - Ralph And His Magic Field
- codeforces B. Ralph And His Magic Field 数学题+快速幂
- codeforces 894 B题 Ralph And His Magic Field(巧思)
- Codeforces 894 B. Ralph And His Magic Field
- codeforces 894B - Ralph And His Magic Field - [快速幂]
- codeforces Round 447 div2 D Ralph And His Tour in Binary Country
- Codeforces Round #447 (Div. 2) D. Ralph And His Tour in Binary Country(dfs)
- 【Codeforces Round 328 (Div 2)B】【找规律】The Monster and the Squirrel 正多边形连边分割块数
- Codeforces Round #419 (Div. 2) D - Karen and Test(规律 杨辉三角)
- Codeforces Round #369 (Div. 2) B. Chris and Magic Square (暴力)
- Codeforces Round#251(Div 2)D Devu and his Brother