ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#202219 | #2324. domino | Anonyme | 100 | 1566ms | 99532kb | C++11 | 3.7kb | 2024-02-14 10:15:07 | 2024-02-14 12:25:03 |
answer
#include <bits/stdc++.h>
#define EB emplace_back
typedef long long ll;
typedef std::vector <int> vector;
const int N = 5000, M = 66666, mod = 998244353;
struct edge {
int u, v;
edge (int u0 = 0, int v0 = 0) : u(u0), v(v0) {}
} e[M];
int R, C, V, E = 0;
int p[N], mat[N][N], elim[N];
int to[M], first[N], next[M];
int orient[M];
inline void addedge(int u, int v) {
// fprintf(stderr, "addedge %d %d\n", u, v);
e[++E] = edge(u, v), next[E] = first[u], first[u] = E;
e[++E] = edge(v, u), next[E] = first[v], first[v] = E;
}
inline int join(int r, int c) {return (r - 1) * C + 1;}
inline void split(int id, int &r, int &c) {r = --id / C + 1, c = id % C + 1;}
inline int ancestor(int x) {return p[x] == x ? x : (p[x] = ancestor(p[x]));}
inline bool Union(int x, int y) {
if ((x = ancestor(x)) == (y = ancestor(y))) return true;
return p[x] = y, false;
}
ll PowerMod(ll a, int n, ll c = 1) {for (; n; n >>= 1, a = a * a % mod) if (n & 1) c = c * a % mod; return c;}
int gauss(int n) {
int i, j, k, *t, det = 1, cnt; ll coe;
static int *m[N];
for (i = 0; i < n; ++i) m[i] = mat[i];
for (i = 0; i < n; ++i) {
for (j = i; j < n && !m[j][i]; ++j);
if (j == n) return 0;
if (i != j) det = mod - det, std::swap(m[i], m[j]);
det = (ll)det * m[i][i] % mod;
coe = PowerMod(m[i][i], mod - 2);
for (j = 0; j < n; ++j) m[i][j] = m[i][j] * coe % mod;
for (cnt = 0, k = i; k < n; ++k) if (m[i][k]) elim[cnt++] = k;
for (k = i + 1; k < n; ++k) if (m[k][i]) {
coe = mod - m[k][i];
for (t = elim; t != elim + cnt; ++t)
m[k][*t] = (m[k][*t] + coe * m[i][*t]) % mod;
}
}
return det;
}
namespace Planar {
#define ad(x) (((x - 1) ^ 1) + 1)
int F = 0;
int belF[M], remain[M], que[M];
vector face[M];
inline bool judge(int A, int B, int C, int D) {
if (B == A + ::C) return (D - 1) % ::C < (C - 1) % ::C;
if (B == A - ::C) return (C - 1) % ::C < (D - 1) % ::C;
if (B == A + 1) return C < D;
if (B == A - 1) return D < C;
abort();
}
void dfs(int i) {
int j, x = e[i].u, y = e[i].v, z, bestV = 0, bestE = 0;
// fprintf(stderr, "search face #%d edge #%d (%d, %d)\n", F, i, x, y);
belF[i] = F, face[F].EB(i);
for (j = first[y]; j; j = next[j]) {
if ((z = e[j].v) == x) continue;
if (!bestV || judge(x, y, z, bestV)) bestV = z, bestE = j;
}
if (!bestE) {
for (j = first[y]; j; j = next[j]) if (e[j].v == x) break;
bestV = x, bestE = j;
}
if (belF[bestE] != F) dfs(bestE);
}
int main() {
int i, f, h, t = 0; bool o;
for (i = 1; i <= E; ++i)
if (!belF[i]) ++F, dfs(i), remain[F] = face[F].size();
for (i = 1; i <= F; ++i)
for (int e : face[i])
if (orient[e] && --remain[i] == 1) que[t++] = i;
for (h = 0; h < t; ++h) {
f = que[h], o = true;
if (!remain[f]) continue;
for (int e : face[f])
if (orient[e]) o ^= orient[e] != e;
else i = e;
orient[ad(i)] = orient[i] = (o ? ad(i) : i);
if (--remain[ f = belF[ad(i)] ] == 1) que[t++] = f;
}
for (i = 1; i <= E; ++i) assert(orient[i]);
return 0;
}
}
int main() {
int i, j, v, n;
scanf("%d%d", &R, &C), V = R * C;
if (R & C & 1) return putchar(48), putchar(10), 0;
for (n = i = 1; i <= R; ++i, ++n)
for (j = 1; j < C; ++j, ++n)
if (scanf("%d", &v), !v) addedge(n, n + 1);
for (n = i = 1; i < R; ++i)
for (j = 1; j <= C; ++j, ++n)
if (scanf("%d", &v), !v) addedge(n, n + C);
std::iota(p + 1, p + (V + 1), 1);
for (i = 1; i <= E; i += 2)
if (!Union(e[i].u, e[i].v)) {
orient[i] = orient[i + 1] = i;
// fprintf(stderr, "connect %d %d\n", e[i].u, e[i].v);
}
Planar::main();
for (i = 1; i <= E; ++i) if (orient[i] == i)
mat[e[i].u - 1][e[i].v - 1] = 1, mat[e[i].v - 1][e[i].u - 1] = mod - 1;
printf("%d\n", gauss(V));
return 0;
}
Details
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 3424kb
input:
4 4 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0
output:
0
result:
ok 1 number(s): "0"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3424kb
input:
4 4 1 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3428kb
input:
4 4 0 1 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 1
output:
4
result:
ok 1 number(s): "4"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3424kb
input:
4 4 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1
output:
0
result:
ok 1 number(s): "0"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3428kb
input:
4 4\x0d0 0 0\x0d0 0 0\x0d0 0 1\x0d0 0 0\x0d0 1 0 0\x0d0 0 1 0\x0d0 0 1 0
output:
16
result:
ok 1 number(s): "16"
Test #6:
score: 0
Accepted
time: 2ms
memory: 3420kb
input:
4 4 1 0 1 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 0ms
memory: 3420kb
input:
4 4 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 1 1
output:
0
result:
ok 1 number(s): "0"
Test #8:
score: 0
Accepted
time: 0ms
memory: 3416kb
input:
4 4 0 0 0 0 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 1 1 1
output:
0
result:
ok 1 number(s): "0"
Test #9:
score: 0
Accepted
time: 0ms
memory: 3424kb
input:
4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
1296
result:
ok 1 number(s): "1296"
Test #10:
score: 0
Accepted
time: 2ms
memory: 3428kb
input:
4 4 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
output:
225
result:
ok 1 number(s): "225"
Subtask #2:
score: 10
Accepted
Test #11:
score: 10
Accepted
time: 3ms
memory: 6804kb
input:
23 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
240007691
result:
ok 1 number(s): "240007691"
Test #12:
score: 0
Accepted
time: 0ms
memory: 3756kb
input:
30 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
output:
815133580
result:
ok 1 number(s): "815133580"
Test #13:
score: 0
Accepted
time: 27ms
memory: 25688kb
input:
37 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
121321543
result:
ok 1 number(s): "121321543"
Test #14:
score: 0
Accepted
time: 16ms
memory: 16208kb
input:
44 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
738812373
result:
ok 1 number(s): "738812373"
Test #15:
score: 0
Accepted
time: 3ms
memory: 6456kb
input:
51 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
811370631
result:
ok 1 number(s): "811370631"
Subtask #3:
score: 20
Accepted
Test #16:
score: 20
Accepted
time: 0ms
memory: 4620kb
input:
25 10 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 ...
output:
718568148
result:
ok 1 number(s): "718568148"
Test #17:
score: 0
Accepted
time: 3ms
memory: 4620kb
input:
25 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ...
output:
236276332
result:
ok 1 number(s): "236276332"
Test #18:
score: 0
Accepted
time: 0ms
memory: 4620kb
input:
25 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ...
output:
206472986
result:
ok 1 number(s): "206472986"
Test #19:
score: 0
Accepted
time: 0ms
memory: 4616kb
input:
25 10 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
932016924
result:
ok 1 number(s): "932016924"
Test #20:
score: 0
Accepted
time: 0ms
memory: 4616kb
input:
25 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ...
output:
675629324
result:
ok 1 number(s): "675629324"
Test #21:
score: 0
Accepted
time: 0ms
memory: 4616kb
input:
25 10 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
283307115
result:
ok 1 number(s): "283307115"
Test #22:
score: 0
Accepted
time: 0ms
memory: 4620kb
input:
25 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ...
output:
384432018
result:
ok 1 number(s): "384432018"
Test #23:
score: 0
Accepted
time: 0ms
memory: 4616kb
input:
25 10 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
167820250
result:
ok 1 number(s): "167820250"
Test #24:
score: 0
Accepted
time: 2ms
memory: 4616kb
input:
25 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 ...
output:
710444478
result:
ok 1 number(s): "710444478"
Test #25:
score: 0
Accepted
time: 0ms
memory: 4616kb
input:
25 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 ...
output:
242871638
result:
ok 1 number(s): "242871638"
Subtask #4:
score: 30
Accepted
Test #26:
score: 30
Accepted
time: 0ms
memory: 7208kb
input:
25 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
990444078
result:
ok 1 number(s): "990444078"
Test #27:
score: 0
Accepted
time: 3ms
memory: 7204kb
input:
25 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ...
output:
525963740
result:
ok 1 number(s): "525963740"
Test #28:
score: 0
Accepted
time: 3ms
memory: 7204kb
input:
25 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 ...
output:
487193228
result:
ok 1 number(s): "487193228"
Test #29:
score: 0
Accepted
time: 3ms
memory: 7160kb
input:
25 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
0
result:
ok 1 number(s): "0"
Test #30:
score: 0
Accepted
time: 3ms
memory: 7204kb
input:
25 24 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
920679202
result:
ok 1 number(s): "920679202"
Test #31:
score: 0
Accepted
time: 0ms
memory: 5092kb
input:
20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 ...
output:
0
result:
ok 1 number(s): "0"
Test #32:
score: 0
Accepted
time: 0ms
memory: 7200kb
input:
25 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
551091036
result:
ok 1 number(s): "551091036"
Test #33:
score: 0
Accepted
time: 0ms
memory: 7208kb
input:
25 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ...
output:
627800602
result:
ok 1 number(s): "627800602"
Test #34:
score: 0
Accepted
time: 3ms
memory: 7204kb
input:
25 24 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
442701383
result:
ok 1 number(s): "442701383"
Test #35:
score: 0
Accepted
time: 5ms
memory: 7200kb
input:
25 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 ...
output:
786418198
result:
ok 1 number(s): "786418198"
Test #36:
score: 0
Accepted
time: 0ms
memory: 5092kb
input:
20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 ...
output:
0
result:
ok 1 number(s): "0"
Subtask #5:
score: 30
Accepted
Test #37:
score: 30
Accepted
time: 203ms
memory: 99528kb
input:
70 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
628348397
result:
ok 1 number(s): "628348397"
Test #38:
score: 0
Accepted
time: 191ms
memory: 99528kb
input:
70 70 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ...
output:
915611786
result:
ok 1 number(s): "915611786"
Test #39:
score: 0
Accepted
time: 104ms
memory: 53628kb
input:
70 70 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
0
result:
ok 1 number(s): "0"
Test #40:
score: 0
Accepted
time: 203ms
memory: 97680kb
input:
70 70 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 ...
output:
0
result:
ok 1 number(s): "0"
Test #41:
score: 0
Accepted
time: 169ms
memory: 99532kb
input:
70 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
160226287
result:
ok 1 number(s): "160226287"
Test #42:
score: 0
Accepted
time: 176ms
memory: 99532kb
input:
70 70 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
470741178
result:
ok 1 number(s): "470741178"
Test #43:
score: 0
Accepted
time: 184ms
memory: 99532kb
input:
70 70 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ...
output:
725093586
result:
ok 1 number(s): "725093586"
Test #44:
score: 0
Accepted
time: 12ms
memory: 26208kb
input:
70 70 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ...
output:
0
result:
ok 1 number(s): "0"
Test #45:
score: 0
Accepted
time: 178ms
memory: 99528kb
input:
70 70 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
933523972
result:
ok 1 number(s): "933523972"
Test #46:
score: 0
Accepted
time: 68ms
memory: 46852kb
input:
70 70 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
0
result:
ok 1 number(s): "0"