結果

問題 No.1469 programing
ユーザー cutmdocutmdo
提出日時 2024-11-09 16:04:54
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 77 ms / 3,000 ms
コード長 4,870 bytes
コンパイル時間 1,256 ms
コンパイル使用メモリ 111,680 KB
実行使用メモリ 45,052 KB
最終ジャッジ日時 2024-11-09 16:04:58
合計ジャッジ時間 3,195 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 1 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 4 ms
5,248 KB
testcase_09 AC 5 ms
5,248 KB
testcase_10 AC 4 ms
5,248 KB
testcase_11 AC 6 ms
5,596 KB
testcase_12 AC 6 ms
5,640 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 9 ms
7,948 KB
testcase_15 AC 7 ms
5,904 KB
testcase_16 AC 8 ms
6,096 KB
testcase_17 AC 77 ms
45,052 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <vector>
#define PROBLEM "https://yukicoder.me/problems/no/1469"
#include <iostream>

#include <ranges>
#include <vector>
namespace mtd {  template <std::ranges::range _R>  class RunLengthEncoding {    using T = std::iter_value_t<std::ranges::iterator_t<_R>>;    const std::vector<std::tuple<T, int>> r;    static constexpr auto construct_rle(const _R& r) {      std::vector<std::tuple<T, int>> rle;      if (r.empty()) { return rle; }      T now = *r.begin();      int cnt = 1;      for (const auto& x : r | std::views::drop(1)) {        if (x == now) {          ++cnt;        } else {          rle.emplace_back(now, cnt);          cnt = 1;          now = x;        }      }      rle.emplace_back(now, cnt);      return rle;    }  public:    constexpr RunLengthEncoding(const _R& r) : r(construct_rle(r)) {}    constexpr auto begin() const { return r.begin(); }    constexpr auto end() const { return r.end(); }  };}  
#include <iostream>
#include <ranges>
#include <type_traits>
#include <vector>
namespace mtd {  namespace io {    namespace type {      template <class T, int Pre = 1, int Size = 0>      struct vec {        using value_type = T;        static constexpr int pre = Pre;        static constexpr int size = Size;      };      template <class T>      concept is_vec = requires {        std::is_same_v<T, vec<typename T::value_type, T::pre, T::size>>;      };    }      template <type::is_vec T>    auto _input(int n) {      std::vector<typename T::value_type> v(n);      for (auto i : std::views::iota(0, n)) { std::cin >> v[i]; }      return v;    }    template <class T>    auto _input() {      T x;      std::cin >> x;      return x;    }    template <int N, class Tuple, class T, class... Args>    auto _tuple_input(Tuple& t) {      if constexpr (type::is_vec<T>) {        if constexpr (T::size == 0) {          std::get<N>(t) = _input<T>(std::get<N - T::pre>(t));        } else {          std::get<N>(t) = _input<T>(T::size);        }      } else {        std::get<N>(t) = _input<T>();      }      if constexpr (sizeof...(Args) > 0) {        _tuple_input<N + 1, Tuple, Args...>(t);      }    }    template <class T>    struct _Converter {      using type = T;    };    template <class T, int Pre, int Size>    struct _Converter<type::vec<T, Pre, Size>> {      using type = std::vector<T>;    };    template <class... Args>    auto in() {      auto base = std::tuple<typename _Converter<Args>::type...>();      _tuple_input<0, decltype(base), Args...>(base);      return base;    }  }  }  
#include <ranges>
namespace mtd {  namespace ranges {    constexpr int _inf = 1e9;    template <class... Args>    struct istream_view        : public std::ranges::view_interface<istream_view<Args...>> {      class iterator {        int count;        std::tuple<typename io::_Converter<Args>::type...> val;      public:        using difference_type = int;        using value_type = decltype(val);        using iterator_concept = std::input_iterator_tag;        constexpr iterator() = default;        constexpr explicit iterator(int count) : count(count) { operator++(); }        constexpr auto operator*() const { return val; }        constexpr auto& operator++() {          --count;          if (count >= 0) { val = io::in<Args...>(); }          return *this;        }        constexpr auto operator++(int) { return ++*this; }        constexpr auto operator==(const iterator& s) const {          return count == s.count;        }        constexpr auto operator==(std::default_sentinel_t s) const {          return count < 0 || std::cin.eof() || std::cin.fail() ||                 std::cin.bad();        }        constexpr friend auto operator==(std::default_sentinel_t s,                                         const iterator& li) {          return li == s;        }      };      int count;    public:      constexpr explicit istream_view(int count) : count(count) {}      constexpr explicit istream_view() : istream_view(_inf) {}      constexpr auto begin() const { return iterator(count); }      constexpr auto end() const { return std::default_sentinel; }    };  }    namespace views {    namespace __detail {      template <typename... _Args>      concept __can_istream_view = requires {        ranges::istream_view(std::declval<_Args>()...);      };    }      template <class... Args>    struct _Istream {      template <class... _Tp>      requires __detail::__can_istream_view<_Tp...>      constexpr auto operator() [[nodiscard]] (_Tp&&... __e) const {        return ranges::istream_view<Args...>(std::forward<_Tp>(__e)...);      }    };    template <class... Args>    inline constexpr _Istream<Args...> istream{};  }  }  

int main() {
  std::cin.tie(0);
  std::ios::sync_with_stdio(0);

  auto [s] = mtd::io::in<std::string>();
  auto rle = mtd::RunLengthEncoding(s);
  for (auto [c, _] : rle) { std::cout << c; }
  std::cout << std::endl;
}

0