結果
| 問題 | No.3504 Insert Maze |
| コンテスト | |
| ユーザー |
sig_256
|
| 提出日時 | 2026-04-18 22:49:39 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 148 ms / 2,000 ms |
| コード長 | 1,568 bytes |
| 記録 | |
| コンパイル時間 | 1,215 ms |
| コンパイル使用メモリ | 78,216 KB |
| 実行使用メモリ | 7,552 KB |
| 最終ジャッジ日時 | 2026-04-18 22:50:06 |
| 合計ジャッジ時間 | 13,190 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 85 |
ソースコード
#include <iostream>
#include <vector>
int main() {
int H, W, maxH = 0, maxW = 0;
std::cin >> H >> W;
std::vector<std::vector<char>> C(H, std::vector<char>(W));
for (auto& l : C) for (char& c : l) std::cin >> c;
C.back().back() = '.';
for (int w = 1; w < W; ++w) {
if (C.front()[w - 1] == 'S' && C.front()[w] == '.') {
if (w > maxW) maxW = w;
C.front()[w] = 'S';
}
}
for (int h = 1; h < H; ++h) {
if (C[h - 1].front() == 'S' && C[h].front() == '.') {
if (h > maxH) maxH = h;
C[h].front() = 'S';
}
for (int w = 1; w < W; ++w) {
if ((C[h][w - 1] == 'S' || C[h - 1][w] == 'S') && C[h][w] == '.') {
if (w > maxW) maxW = w;
if (h > maxH) maxH = h;
C[h][w] = 'S';
}
}
}
if (C.back().back() == 'S') {
std::cout << H + W - 2 << '\n';
return 0;
}
maxH += 2;
maxW += 2;
if (W <= maxW || H <= maxH) {
std::cout << H + W - 1 << '\n';
return 0;
}
C.back().back() = 'G';
for (int w = W - 1; w-- > 0;) {
if (C.back()[w + 1] == 'G' && C.back()[w] == '.') {
if (w < maxW) {
std::cout << H + W - 1 << '\n';
return 0;
}
C.back()[w] = 'G';
}
}
for (int h = H - 1; h-- > 0;) {
if (C[h + 1].back() == 'G' && C[h].back() == '.') {
if (h < maxH) {
std::cout << H + W - 1 << '\n';
return 0;
}
C[h].back() = 'G';
}
for (int w = W - 1; w-- > 0;) {
if ((C[h][w + 1] == 'G' || C[h + 1][w] == 'G') && C[h][w] == '.') {
if (h < maxH || w < maxW) {
std::cout << H + W - 1 << '\n';
return 0;
}
C[h][w] = 'G';
}
}
}
std::cout << H + W << '\n';
return 0;
}
sig_256