This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/sequence/run-length-encoding.hpp"
(1) std::vector< std::pair< T, usize > >
run_length_encoding<T, Iter>(Iter first, Iter last)
(2) std::vector< std::pair< T, usize > >
run_length_encoding<T>(const std::vector<T> &vs)
(3) std::vector< std::pair< char, usize > >
run_length_encoding<T>(const std::string &s)
std::vector<T>
をランレングス圧縮した結果を返す。std::string
をランレングス圧縮した結果を返す。ランレングス圧縮の結果は (値, 個数)
を要素とする std::vector
で返される。
要素数を $n$ として $O(n)$
#pragma once
#include "src/cpp-template/header/size-alias.hpp"
#include <string>
#include <utility>
#include <vector>
namespace luz {
template < class T, class Iter >
std::vector< std::pair< T, usize > > run_length_encoding(
Iter first, Iter last) {
std::vector< std::pair< T, usize > > result;
while (first != last) {
if (result.empty() or result.back().first != *first) {
result.emplace_back(*first, 0);
}
result.back().second++;
++first;
}
return result;
}
template < typename T >
std::vector< std::pair< T, usize > > run_length_encoding(
const std::vector< T > &vs) {
return run_length_encoding(vs.begin(), vs.end());
}
std::vector< std::pair< char, usize > > run_length_encoding(
const std::string &s) {
return run_length_encoding< char >(s.begin(), s.end());
}
} // namespace luz
#line 2 "src/sequence/run-length-encoding.hpp"
#line 2 "src/cpp-template/header/size-alias.hpp"
#include <cstddef>
namespace luz {
using isize = std::ptrdiff_t;
using usize = std::size_t;
} // namespace luz
#line 4 "src/sequence/run-length-encoding.hpp"
#include <string>
#include <utility>
#include <vector>
namespace luz {
template < class T, class Iter >
std::vector< std::pair< T, usize > > run_length_encoding(
Iter first, Iter last) {
std::vector< std::pair< T, usize > > result;
while (first != last) {
if (result.empty() or result.back().first != *first) {
result.emplace_back(*first, 0);
}
result.back().second++;
++first;
}
return result;
}
template < typename T >
std::vector< std::pair< T, usize > > run_length_encoding(
const std::vector< T > &vs) {
return run_length_encoding(vs.begin(), vs.end());
}
std::vector< std::pair< char, usize > > run_length_encoding(
const std::string &s) {
return run_length_encoding< char >(s.begin(), s.end());
}
} // namespace luz