#include <cstdio>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
const int lim = 35,
dx[4] = {0, 1, 0, -1},
dy[4] = {1, 0, -1, 0};
int m, n, a[lim][lim], ans;
int s[lim * lim][lim * lim], k;
void solve(int m, int n)
{
int *r[lim * lim], v[lim * lim];
memset(v, 0, sizeof(v));
for (int i = 0; i < m; ++i)
{
r[i] = s[i];
while (r[i][v[i]] == 0 && v[i] < n) ++v[i];
}
for (int i = 0; i < m - 1; ++i)
for (int j = 0; j < m - i - 1; ++j)
if (v[j] > v[j + 1])
{
swap(r[j], r[j + 1]);
swap(v[j], v[j + 1]);
}
for (int i = 0; i < m - 1 && v[i] < n; ++i)
while (v[i] == v[i + 1])
{
int p = i + 1;
for (int j = 0; j < n; ++j)
{
r[p][j] -= r[i][j];
if (r[p][j] < 0) r[p][j] = 1;
}
while (r[p][v[p]] == 0 && v[p] < n) ++v[p];
while (p < m - 1 && v[p] > v[p + 1])
{
swap(r[p], r[p + 1]);
swap(v[p], v[p + 1]);
++p;
}
}
bool chk[lim * lim];
memset(chk, 0, sizeof(chk));
for (int i = 0; i < m; ++i)
if (v[i] != n - 1) chk[v[i]] = true;
else
{
ans -= lim * lim;
return;
}
for (int j = 0; j < n - 1; ++j)
ans += !chk[j];
}
long long res[lim] = {1};
const long long mod = 1e18;
void print_ans()
{
while (ans--)
{
bool mem = 0;
for (int i = 0; i < lim; ++i)
{
(res[i] <<= 1) += mem;
if (res[i] == 0) break;
else if (res[i] >= mod)
{
res[i] -= mod;
mem = 1;
}
else mem = 0;
}
}
int i = lim - 1;
while (res[i] == 0) --i;
cout << res[i--];
while (i >= 0)
cout << setw(18) << setfill('0') << res[i--];
}
int main()
{
freopen("BOMB.INP", "r", stdin);
freopen("BOMB.OUT", "w", stdout);
cin >> m >> n;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
{
cin >> a[i][j];
if ((i ^ j) % 2 == 1 && a[i][j] != -1)
{
for (int p = 0; p < 4; ++p)
{
int x = i + dx[p], y = j + dy[p];
if (x >= 0 && x < m && y >= 0 && y < n)
s[k][x * n + y >> 1] = 1;
}
s[k++][n * m + 1 >> 1] = a[i][j];
}
}
solve(k, (n * m + 1 >> 1) + 1); k = 0;
memset(s, 0, sizeof(s));
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if ((i ^ j) % 2 == 0 && a[i][j] != -1)
{
for (int p = 0; p < 4; ++p)
{
int x = i + dx[p], y = j + dy[p];
if (x >= 0 && x < m && y >= 0 && y < n)
s[k][x * n + y >> 1] = 1;
}
s[k++][n * m >> 1] = a[i][j];
}
solve(k, (n * m >> 1) + 1);
if (ans >= 0) print_ans();
else cout << 0;
}
* Chuyên dạy lập trình ONLINE cho học sinh THCS, THPT *.
Mọi giao lưu, trao đổi, xin liên hệ: Lê Quang Vinh - zalo: 037.803.8755.
Page: Lớp học Code Sky
Group FB1: Ôn thi HSG9 - THTB - TS10 chuyên tin
Group FB2: Học Scratch - Ôn thi Tin học trẻ bảng A
Thứ Năm, 5 tháng 1, 2023
bomb c++
Đăng ký:
Đăng Nhận xét (Atom)
Không có nhận xét nào:
Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.