Submission #71188444


Source Code Expand

#include <algorithm>
#include <array>
#include <bit>
#include <bitset>
#include <cctype>
#include <cmath>
#include <compare>
#include <cstdint>
#include <deque>
#include <functional>
#include <initializer_list>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <numbers>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <string_view>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using llong = long long;
using ullong = unsigned long long;

using namespace std::literals;

template <typename T, typename = void> struct IsIterable : std::false_type {};
template <typename T>
struct IsIterable<T, std::void_t<typename std::decay_t<T>::iterator>>
    : public std::true_type {};
template <typename T> inline constexpr bool IsIterableV = IsIterable<T>::value;

template <typename T, typename = void> struct IsReadable : std::false_type {};
template <typename T>
struct IsReadable<
    T, std::void_t<decltype(std::declval<std::istream>() >> std::declval<T>())>>
    : public std::true_type {};
template <typename T> inline constexpr bool IsReadableV = IsReadable<T>::value;

template <typename T, typename = void> struct IsWritable : std::false_type {};
template <typename T>
struct IsWritable<
    T, std::void_t<decltype(std::declval<std::ostream>() << std::declval<T>())>>
    : public std::true_type {};
template <typename T> inline constexpr bool IsWritableV = IsWritable<T>::value;

template <typename T, typename U = std::decay_t<T>>
struct IsIOManip
    : std::disjunction<std::is_function<U>,
                       std::is_same<U, decltype(std::resetiosflags({}))>,
                       std::is_same<U, decltype(std::setiosflags({}))>,
                       std::is_same<U, decltype(std::setbase({}))>,
                       std::is_same<U, decltype(std::setfill(char{}))>,
                       std::is_same<U, decltype(std::setprecision({}))>,
                       std::is_same<U, decltype(std::setw({}))>> {};
template <typename T> inline constexpr bool IsIOManipV = IsIOManip<T>::value;

template <typename T, typename = void> struct IsTupleLike : std::false_type {};
template <typename T>
struct IsTupleLike<
    T, std::void_t<decltype(std::tuple_size<std::decay_t<T>>::value)>>
    : public std::true_type {};
template <typename T>
inline constexpr bool IsTupleLikeV = IsTupleLike<T>::value;

std::string separator = " ";
ullong column = 0;
ullong row = 0;
bool flushEnabled = false;

void setSeparator(std::string_view s) { separator = s; }

void setFlushEnabled(bool enabled) { flushEnabled = enabled; }

std::istream &read() { return std::cin; }

std::istream &readln(std::string &s) { return std::getline(std::cin, s); }

std::istream &read(std::ios_base &(*f)(std::ios_base &)) {
  return std::cin >> f;
}

std::istream &read(std::ios &(*f)(std::ios &)) { return std::cin >> f; }

std::istream &read(std::istream &(*f)(std::istream &)) { return std::cin >> f; }

template <typename T, std::enable_if_t<IsReadableV<T &>> * = nullptr>
std::istream &read(T &t) {
  return std::cin >> t;
}

template <typename T, size_t N = 0,
          std::enable_if_t<IsTupleLikeV<T &> && !IsReadableV<T &>> * = nullptr>
std::istream &read(T &t);

template <typename T,
          std::enable_if_t<IsIterableV<T &> && !IsReadableV<T &>> * = nullptr>
std::istream &read(T &t) {
  for (auto &&t_i : t) {
    read(t_i);
  }

  return std::cin;
}

template <typename T, size_t N,
          std::enable_if_t<IsTupleLikeV<T &> && !IsReadableV<T &>> *>
std::istream &read(T &t) {
  if constexpr (std::tuple_size_v<std::decay_t<T>> != N) {
    read(std::get<N>(t));
    return read<T &, N + 1>(t);
  } else {
    return std::cin;
  }
}

template <typename T, typename... U> std::istream &read(T &t, U &...u) {
  read(t);
  return read(u...);
}

std::ostream &write() { return std::cout; }

std::ostream &writeln() {
  ++row;
  column = 0;

  if (flushEnabled) {
    return std::cout.put('\n').flush();
  } else {
    return std::cout.put('\n');
  }
}

std::ostream &write(std::ios_base &(*f)(std::ios_base &)) {
  return std::cout << f;
}

std::ostream &write(std::ios &(*f)(std::ios &)) { return std::cout << f; }

std::ostream &write(std::ostream &(*f)(std::ostream &)) {
  return std::cout << f;
}

template <typename T, std::enable_if_t<IsIOManipV<T &&>> * = nullptr>
std::ostream &write(T &&t) {
  return std::cout << t;
}

template <typename T,
          std::enable_if_t<IsWritableV<T &&> && !IsIOManipV<T &&>> * = nullptr>
std::ostream &write(T &&t) {
  if (column > 0 && !separator.empty()) {
    std::cout << separator;
  }

  ++column;
  return std::cout << t;
}

template <
    typename T, size_t N = 0,
    std::enable_if_t<IsTupleLikeV<T &&> && !IsWritableV<T &&>> * = nullptr>
std::ostream &write(T &&t);

template <typename T,
          std::enable_if_t<IsIterableV<T &&> && !IsWritableV<T &&>> * = nullptr>
std::ostream &write(T &&t) {
  ullong i = 0;

  for (auto it = t.begin(); it != t.end(); ++it, ++i) {
    if constexpr (IsIterableV<decltype(*it)> || IsTupleLikeV<decltype(*it)>) {
      if (i > 0) {
        writeln();
      }
    }

    write(*it);
  }

  return std::cout;
}

template <typename T, size_t N,
          std::enable_if_t<IsTupleLikeV<T &&> && !IsWritableV<T &&>> *>
std::ostream &write(T &&t) {
  if constexpr (std::tuple_size_v<std::decay_t<T>> != N) {
    write(std::get<N>(t));
    return write<T &&, N + 1>(std::forward<T>(t));
  } else {
    return std::cout;
  }
}

template <typename T, typename... U> std::ostream &write(T &&t, U &&...u) {
  write(std::forward<T>(t));
  return write(std::forward<U>(u)...);
}

template <typename... T> std::ostream &writeln(T &&...t) {
  write(std::forward<T>(t)...);
  return writeln();
}

template <typename... T> std::size_t hash(const T &...t) {
  std::size_t result = 1;
  ((result = result * 31 + std::hash<std::decay_t<T>>{}(t)), ...);
  return result;
}

struct PairHash {
  template <typename T, typename U>
  std::size_t operator()(const std::pair<T, U> &pair) const {
    return std::apply(hash<T, U>, pair);
  }
};

void answer() {
  std::unordered_set<std::pair<llong, llong>, PairHash> smokes;
  llong N, R, C;
  read(N, R, C);
  std::string S;
  read(S);
  std::pair<llong, llong> fire{0, 0}, eye{C, R};

  setSeparator("");

  for (llong i = 0; i < N; i++) {
    smokes.insert(fire);
    char d = S[i];

    switch (d) {
    case 'N':
      fire.second++;
      eye.second++;
      break;
    case 'W':
      fire.first++;
      eye.first++;
      break;
    case 'S':
      fire.second--;
      eye.second--;
      break;
    case 'E':
      fire.first--;
      eye.first--;
      break;
    }

    write(smokes.contains(eye) ? '1' : '0');
  }

  writeln();
}

int main() {
  std::cin.tie(nullptr);
  std::ios_base::sync_with_stdio(false);
  answer();
  return 0;
}

Submission Info

Submission Time
Task D - Bonfire
User k0michi
Language C++ 20 (gcc 12.2)
Score 425
Code Size 7228 Byte
Status AC
Exec Time 30 ms
Memory 15568 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 3
AC × 63
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 3428 KiB
sample_02.txt AC 1 ms 3444 KiB
sample_03.txt AC 1 ms 3428 KiB
test_01.txt AC 11 ms 6340 KiB
test_02.txt AC 11 ms 6368 KiB
test_03.txt AC 10 ms 6340 KiB
test_04.txt AC 1 ms 3516 KiB
test_05.txt AC 13 ms 6372 KiB
test_06.txt AC 13 ms 6788 KiB
test_07.txt AC 14 ms 6352 KiB
test_08.txt AC 1 ms 3584 KiB
test_09.txt AC 13 ms 6364 KiB
test_10.txt AC 10 ms 5088 KiB
test_11.txt AC 13 ms 5236 KiB
test_12.txt AC 1 ms 3520 KiB
test_13.txt AC 10 ms 6352 KiB
test_14.txt AC 10 ms 6288 KiB
test_15.txt AC 12 ms 6360 KiB
test_16.txt AC 1 ms 3608 KiB
test_17.txt AC 10 ms 6340 KiB
test_18.txt AC 11 ms 6352 KiB
test_19.txt AC 10 ms 6348 KiB
test_20.txt AC 3 ms 4040 KiB
test_21.txt AC 11 ms 6380 KiB
test_22.txt AC 9 ms 5376 KiB
test_23.txt AC 11 ms 6336 KiB
test_24.txt AC 10 ms 6416 KiB
test_25.txt AC 14 ms 15348 KiB
test_26.txt AC 14 ms 15352 KiB
test_27.txt AC 15 ms 15400 KiB
test_28.txt AC 14 ms 15320 KiB
test_29.txt AC 15 ms 15312 KiB
test_30.txt AC 15 ms 15352 KiB
test_31.txt AC 15 ms 15464 KiB
test_32.txt AC 16 ms 15328 KiB
test_33.txt AC 14 ms 15360 KiB
test_34.txt AC 14 ms 15380 KiB
test_35.txt AC 14 ms 15424 KiB
test_36.txt AC 14 ms 15404 KiB
test_37.txt AC 15 ms 15440 KiB
test_38.txt AC 15 ms 15448 KiB
test_39.txt AC 15 ms 15568 KiB
test_40.txt AC 15 ms 15492 KiB
test_41.txt AC 15 ms 9308 KiB
test_42.txt AC 21 ms 12404 KiB
test_43.txt AC 20 ms 15520 KiB
test_44.txt AC 30 ms 15356 KiB
test_45.txt AC 14 ms 9860 KiB
test_46.txt AC 13 ms 7628 KiB
test_47.txt AC 13 ms 10380 KiB
test_48.txt AC 17 ms 9288 KiB
test_49.txt AC 15 ms 12180 KiB
test_50.txt AC 19 ms 12256 KiB
test_51.txt AC 19 ms 10380 KiB
test_52.txt AC 13 ms 10392 KiB
test_53.txt AC 18 ms 9832 KiB
test_54.txt AC 30 ms 15440 KiB
test_55.txt AC 28 ms 15428 KiB
test_56.txt AC 23 ms 12580 KiB
test_57.txt AC 17 ms 12424 KiB
test_58.txt AC 14 ms 10916 KiB
test_59.txt AC 13 ms 9864 KiB
test_60.txt AC 16 ms 10788 KiB