Submission #8804856


Source Code Expand

#include <bits/stdc++.h>
#define BIT(n) (1LL << (n))
#define BITF(n, i) (((n) >> i) & 1)
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPB(i, n) for (int i = 0; i < BIT(n); i++)
#define REPS(i, x) for (int i = 1; i <= x; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define REPZ(i, x) for (int i = 0; i <= x; i++)
#define FOR(i, m, n) for (int i = m; i < n; i++)
#define FORA(i, n) for (auto &&i : n)
#define FORS(i, m, n) for (int i = m; i <= n; i++)
using namespace std;
#define PRINTARR(x, y)                                     \
  cerr << #x << "=\n";                                     \
  for (auto itr = x; itr != y; itr++) cerr << *itr << " "; \
  cerr << endl;
#define PRINTARR2(x, i0, i1)                                       \
  cerr << #x << "=\n";                                             \
  for (int ii0 = 0; ii0 < i0; ii0++) {                             \
    for (int ii1 = 0; ii1 < i1; ii1++) cerr << x[ii0][ii1] << " "; \
    cerr << endl;                                                  \
  }
#define DUMPOUT cerr
// vector
template <typename T> istream &operator>>(istream &is, vector<T> &vec) {
  for (T &x : vec) is >> x;
  return is;
}
// pair
template <typename T, typename U> ostream &operator<<(ostream &os, pair<T, U> &pair_var) {
  os << "(" << pair_var.first << ", " << pair_var.second << ")";
  return os;
}
// vector
template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {
  os << "{";
  REP(i, (int)vec.size())
  os << vec[i] << (i + 1 == (int)vec.size() ? "" : ", ");
  os << "}";
  return os;
}
// map
template <typename T, typename U> ostream &operator<<(ostream &os, map<T, U> &map_var) {
  os << "{";
  FORA(itr, map_var) {
    os << *itr;
    itr++;
    if (itr != map_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}
// set
template <typename T> ostream &operator<<(ostream &os, set<T> &set_var) {
  os << "{";
  FORA(itr, set_var) {
    os << *itr;
    itr++;
    if (itr != set_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}
void dump_func() { DUMPOUT << endl; }
template <class Head, class... Tail> void dump_func(Head &&head, Tail &&... tail) {
  DUMPOUT << head;
  if (sizeof...(Tail) > 0) DUMPOUT << ", ";
  dump_func(std::move(tail)...);
}
#ifdef DEBUG_
#define DEB
#define DUMP(...)                                                             \
  DUMPOUT << "  " << string(#__VA_ARGS__) << ": "                             \
          << "[" << to_string(__LINE__) << ":" << __FUNCTION__ << "]" << endl \
          << "    ",                                                          \
      dump_func(__VA_ARGS__)
#else
#define DEB if (false)
#define DUMP(...)
#endif
#define ALL(v) v.begin(), v.end()
#define fst first
#define snd second
#define mp make_pair
#define pb push_back
#define epb emplace_back
#define int long long
#define pint pair<int, int>
#define ld long double
using namespace std;
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> using vec = std::vector<T>;
template <class T> void print(const T &x) { cout << x << "\n"; }
const int MOD = 1000000007, INF0 = 1061109567, INF = INF0 * INF0;
const double EPS = 1e-10, PI = acos(-1.0);
const int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
#define MAXN 640000
//----//
struct edge {
  int from, to;
};
char A[800][800];
// edge G[(640000 * 4)];
int H, W, K, S;

int d[MAXN];
int d2[MAXN];
vector<int> G[MAXN];
bool visited[MAXN];
struct Idcost {
  int id, cost;
};
queue<Idcost> q;
void bfs() {
  fill(d, d + H * W, INF);
  Idcost start = {S, 0};
  visited[S] = true;
  d[S] = 0;
  q.push(start);
  while (!q.empty()) {
    Idcost now = q.front();
    q.pop();

    /*if (now.id == T) {
      return now.cost;
    }*/
    for (auto x : G[now.id]) {
      Idcost next = {x, now.cost + 1};
      if (!visited[x]) {
        visited[x] = true;
        d[x] = next.cost;
        //        DUMP(x, now.cost + 1);
        q.push(next);
      }
    }
  }
  return;
}

signed main() {
  cin.tie(0), ios::sync_with_stdio(false);
  cout << fixed << setprecision(10);
  cin >> H >> W >> K;
  REP(i, H) REP(j, W) {
    cin >> A[i][j];
    if (A[i][j] == 'S') S = i * W + j;
  }

  REP(i, H) {
    REP(j, W - 1) {
      if (A[i][j] != '#' && A[i][j + 1] != '#') {
        int addr = i * W + j;
        G[addr].pb(addr + 1);
        G[addr + 1].pb(addr);
      }
    }
  }
  REP(i, W) {
    REP(j, H - 1) {
      if (A[j][i] != '#' && A[j + 1][i] != '#') {
        int addr = j * W + i;
        G[addr].pb(addr + W);
        G[addr + W].pb(addr);
      }
    }
  }
  // DUMP(S);
  bfs();
  //REP(i, H * W) if (d[i] != INF) DUMP(i / W, i % W, d[i]);
  fill(d2, d2 + H * W, INF);
  REP(i, H) REP(j, W) {
    int val = min({i, H - 1 - i, j, W - 1 - j});
    d2[i * W + j] = (val + K - 1) / K;
  }
  int ans = INF;
  REP(i, H) REP(j, W) {
    if (d[i * W + j] <= K) chmin(ans, 1 + d2[i * W + j]);
  }
  print(ans);
  //  REP(i, H * W) DUMP(i, d[i]);
}

Submission Info

Submission Time
Task C - Closed Rooms
User cygnus
Language C++14 (GCC 5.4.1)
Score 700
Code Size 5312 Byte
Status AC
Exec Time 264 ms
Memory 58368 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 46
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in3.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in4.txt, in40.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
in1.txt AC 79 ms 37760 KB
in10.txt AC 77 ms 37760 KB
in11.txt AC 77 ms 37632 KB
in12.txt AC 79 ms 37760 KB
in13.txt AC 77 ms 37760 KB
in14.txt AC 77 ms 37760 KB
in15.txt AC 78 ms 37632 KB
in16.txt AC 78 ms 37632 KB
in17.txt AC 77 ms 37632 KB
in18.txt AC 77 ms 37632 KB
in19.txt AC 77 ms 37760 KB
in2.txt AC 77 ms 37760 KB
in20.txt AC 7 ms 18688 KB
in21.txt AC 7 ms 18048 KB
in22.txt AC 7 ms 18176 KB
in23.txt AC 51 ms 31616 KB
in24.txt AC 50 ms 31616 KB
in25.txt AC 50 ms 31616 KB
in26.txt AC 150 ms 45824 KB
in27.txt AC 146 ms 45824 KB
in28.txt AC 145 ms 45824 KB
in29.txt AC 152 ms 45824 KB
in3.txt AC 79 ms 37632 KB
in30.txt AC 148 ms 45824 KB
in31.txt AC 152 ms 45824 KB
in32.txt AC 147 ms 45824 KB
in33.txt AC 264 ms 58368 KB
in34.txt AC 252 ms 58368 KB
in35.txt AC 257 ms 58368 KB
in36.txt AC 27 ms 26496 KB
in37.txt AC 27 ms 26496 KB
in38.txt AC 27 ms 26496 KB
in39.txt AC 233 ms 55552 KB
in4.txt AC 77 ms 37632 KB
in40.txt AC 235 ms 55424 KB
in5.txt AC 77 ms 37760 KB
in6.txt AC 77 ms 37632 KB
in7.txt AC 77 ms 37632 KB
in8.txt AC 78 ms 37760 KB
in9.txt AC 80 ms 37632 KB
sample1.txt AC 6 ms 18048 KB
sample2.txt AC 6 ms 18048 KB
sample3.txt AC 6 ms 18048 KB