Submission #4243109


Source Code Expand

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <chrono>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <tuple>
#include <unordered_map>
#include <vector>
using namespace std;

#define FOR(i,m,n) for(int i=(m);i<(n);++i)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()

const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fLL;
/*----------------------------------------*/
const int dy[] = {1, 0, -1, 0}, dx[] = {0, -1, 0, 1};

vector<vector<int> > bfs(const vector<vector<char> > &board, int sy, int sx) {
  const int height = board.size(), width = board.front().size();
  vector<vector<int> > dist(height, vector<int>(width, -1));
  dist[sy][sx] = 0;
  queue<pair<int, int>> que;
  que.push({sy, sx});
  while (!que.empty()) {
    pair<int, int> pr = que.front(); que.pop();
    REP(i, 4) {
      int y = pr.first + dy[i], x = pr.second + dx[i];
      if (0 <= y && y < height && 0 <= x && x < width && dist[y][x] == -1 && board[y][x] != '#') {
        dist[y][x] = dist[pr.first][pr.second] + 1;
        que.push({y, x});
      }
    }
  }
  return dist;
}

int main() {
  cin.tie(0); ios::sync_with_stdio(false);
  // freopen("input.txt", "r", stdin);

  int n, m; cin >> n >> m;
  vector<vector<char> > s(n, vector<char>(m));
  int sy, sx, cy, cx, gy, gx;
  REP(i, n) REP(j, m) {
    cin >> s[i][j];
    if (s[i][j] == 'S') {
      sy = i; sx = j;
    } else if (s[i][j] == 'C') {
      cy = i; cx = j;
    } else if (s[i][j] == 'G') {
      gy = i; gx = j;
    }
  }
  vector<vector<int> > s2c = bfs(s, sy, sx), c2g = bfs(s, cy, cx);
  if (s2c[cy][cx] == -1 || c2g[gy][gx] == -1) {
    cout << -1 << '\n';
    return 0;
  }
  cout << s2c[cy][cx] + c2g[gy][gx] << '\n';
  return 0;
}

Submission Info

Submission Time
Task C - 自宅からの脱出
User emthrm
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2028 Byte
Status AC
Exec Time 19 ms
Memory 2560 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 24
Set Name Test Cases
All input_0.txt, input_1.txt, input_10.txt, input_11.txt, input_12.txt, input_13.txt, input_14.txt, input_15.txt, input_16.txt, input_17.txt, input_18.txt, input_19.txt, input_2.txt, input_20.txt, input_21.txt, input_22.txt, input_23.txt, input_3.txt, input_4.txt, input_5.txt, input_6.txt, input_7.txt, input_8.txt, input_9.txt
Case Name Status Exec Time Memory
input_0.txt AC 1 ms 256 KB
input_1.txt AC 1 ms 256 KB
input_10.txt AC 1 ms 256 KB
input_11.txt AC 1 ms 256 KB
input_12.txt AC 1 ms 256 KB
input_13.txt AC 1 ms 384 KB
input_14.txt AC 10 ms 2560 KB
input_15.txt AC 19 ms 2432 KB
input_16.txt AC 4 ms 2048 KB
input_17.txt AC 19 ms 2560 KB
input_18.txt AC 2 ms 384 KB
input_19.txt AC 2 ms 384 KB
input_2.txt AC 1 ms 256 KB
input_20.txt AC 2 ms 384 KB
input_21.txt AC 14 ms 2560 KB
input_22.txt AC 5 ms 2560 KB
input_23.txt AC 5 ms 2560 KB
input_3.txt AC 1 ms 256 KB
input_4.txt AC 1 ms 256 KB
input_5.txt AC 1 ms 256 KB
input_6.txt AC 1 ms 256 KB
input_7.txt AC 1 ms 256 KB
input_8.txt AC 1 ms 256 KB
input_9.txt AC 1 ms 256 KB