ログインしてください。
提出 #37509559
ソースコード 拡げる
#include <cstring>
#include <cstdio>
namespace io {
int c, t, s[100];
template <typename T> inline void read(T& x) {
x = 0;
t = 0;
c = getchar();
while (c < 48 || c > 57) {
if (c == 45) t = 1;
c = getchar();
}
while (c >= 48 && c <= 57) {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
if (t) x = -x;
}
template <typename T> inline void write(T x) {
if (x) {
if (x < 0) {
putchar(45);
x = -x;
}
t = 0;
while (x) {
s[t++] = x % 10;
x /= 10;
}
while (t--) {
putchar(s[t] ^ 48);
}
} else {
putchar(48);
}
putchar(10);
}
}
using io::read;
using io::write;
const int _ = 1e3 + 10;
bool a[_][_], b[_][2][2], l[2], r[2], tmp;
int n, m, k, f[_][2][2], ans;
inline void cmin(int& a, int b) {
if (a > b) a = b;
}
int main() {
read(n);
read(m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
read(k);
a[i][j] = k;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (((j == 1 || a[i][j] != a[i][j-1])) && ((j == m || a[i][j] != a[i][j+1]))) {
if (i == 1) {
l[a[i][j] ^ a[i+1][j]] = true;
} else if (i == n) {
r[a[i][j] ^ a[i-1][j]] = true;
} else {
b[i][a[i][j] ^ a[i-1][j]][a[i][j] ^ a[i+1][j]] = true;
}
}
}
}
memset(f, 0x3F, sizeof(f));
for (int x = 0; x <= 1; x++) {
for (int y = 0; y <= 1; y++) {
tmp = true;
for (int p = 0; p <= 1; p++) {
if (l[p] && (!((x ^ y) == p))) tmp = false;
}
if (tmp) f[2][x][y] = (x + y);
}
}
for (int i = 2; i < n; i++) {
for (int x = 0; x <= 1; x++) {
for (int y = 0; y <= 1; y++) {
for (int z = 0; z <= 1; z++) {
if (f[i][x][y] != 0x3F3F3F3F) {
tmp = true;
for (int p = 0; p <= 1; p++) {
for (int q = 0; q <= 1; q++) {
if (b[i][p][q] && (!(((x ^ y) == p) || ((y ^ z) == q)))) tmp = false;
}
}
if (tmp) cmin(f[i+1][y][z], f[i][x][y] + z);
}
}
}
}
}
ans = 0x3F3F3F3F;
for (int x = 0; x <= 1; x++) {
for (int y = 0; y <= 1; y++) {
tmp = true;
for (int p = 0; p <= 1; p++) {
if (r[p] && (!((x ^ y) == p))) tmp = false;
}
if (tmp) cmin(ans, f[n][x][y]);
}
}
if (ans == 0x3F3F3F3F) ans = -1;
write(ans);
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Don't Isolate Elements |
| ユーザ | Ox3F |
| 言語 | C++ (GCC 9.2.1) |
| 得点 | 500 |
| コード長 | 2348 Byte |
| 結果 | AC |
| 実行時間 | 22 ms |
| メモリ | 2540 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 500 / 500 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | example0.txt, example1.txt, example2.txt |
| All | example0.txt, example1.txt, example2.txt, hand0.txt, hand1.txt, hand2.txt, hand3.txt, random0.txt, random1.txt, random10.txt, random11.txt, random12.txt, random13.txt, random14.txt, random15.txt, random16.txt, random17.txt, random18.txt, random19.txt, random2.txt, random20.txt, random21.txt, random22.txt, random3.txt, random4.txt, random5.txt, random6.txt, random7.txt, random8.txt, random9.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| example0.txt | AC | 7 ms | 1428 KiB |
| example1.txt | AC | 2 ms | 1504 KiB |
| example2.txt | AC | 1 ms | 1444 KiB |
| hand0.txt | AC | 1 ms | 1416 KiB |
| hand1.txt | AC | 2 ms | 1388 KiB |
| hand2.txt | AC | 2 ms | 1556 KiB |
| hand3.txt | AC | 16 ms | 2408 KiB |
| random0.txt | AC | 16 ms | 2416 KiB |
| random1.txt | AC | 15 ms | 2368 KiB |
| random10.txt | AC | 17 ms | 2468 KiB |
| random11.txt | AC | 16 ms | 2420 KiB |
| random12.txt | AC | 20 ms | 2384 KiB |
| random13.txt | AC | 22 ms | 2348 KiB |
| random14.txt | AC | 18 ms | 2284 KiB |
| random15.txt | AC | 18 ms | 2292 KiB |
| random16.txt | AC | 18 ms | 2488 KiB |
| random17.txt | AC | 19 ms | 2408 KiB |
| random18.txt | AC | 17 ms | 2292 KiB |
| random19.txt | AC | 19 ms | 2328 KiB |
| random2.txt | AC | 15 ms | 2384 KiB |
| random20.txt | AC | 17 ms | 2300 KiB |
| random21.txt | AC | 19 ms | 2428 KiB |
| random22.txt | AC | 20 ms | 2340 KiB |
| random3.txt | AC | 16 ms | 2412 KiB |
| random4.txt | AC | 16 ms | 2380 KiB |
| random5.txt | AC | 16 ms | 2368 KiB |
| random6.txt | AC | 21 ms | 2428 KiB |
| random7.txt | AC | 16 ms | 2540 KiB |
| random8.txt | AC | 15 ms | 2384 KiB |
| random9.txt | AC | 16 ms | 2412 KiB |