From 8a1b4420930272c8fe7ec5056d53567d2ac8efa3 Mon Sep 17 00:00:00 2001 From: shogo314 Date: Sat, 20 Jan 2024 08:16:31 +0900 Subject: [PATCH 01/10] add rhstring --- cpp/rolling-hash.hpp | 84 ++++++++++++++++++++++++++++++++++ test/atcoder-abc331-f.test.cpp | 36 +++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 test/atcoder-abc331-f.test.cpp diff --git a/cpp/rolling-hash.hpp b/cpp/rolling-hash.hpp index 6874980..1e79cb5 100644 --- a/cpp/rolling-hash.hpp +++ b/cpp/rolling-hash.hpp @@ -3,6 +3,9 @@ #include #include #include +#include + +struct RHString; /** * @brief ローリングハッシュ @@ -94,4 +97,85 @@ class RollingHash { expand(r - l); return add(hash[r], MOD - mul(hash[l], power[r-l])); } + + friend RHString; +}; + +/** + * @brief ローリングハッシュによって管理される文字列型 + */ +struct RHString { + RollingHash& rh; + size_t sz; + unsigned long long hash1; //!< 正順 + unsigned long long hash2; //!< 逆順 + /** + * @brief コンストラクタ + * 予めRollingHashをインスタンス化しておく必要がある + */ + RHString(RollingHash& rh) : rh(rh), sz(0), hash1(0), hash2(0) {} + RHString(RollingHash& rh, size_t sz, unsigned long long hash1, unsigned long long hash2) : rh(rh), sz(sz), hash1(hash1), hash2(hash2) {} + RHString(const RHString& o) : rh(o.rh), sz(o.sz), hash1(o.hash1), hash2(o.hash2) {} + template + RHString(RollingHash& rh, R s) : rh(rh) { + using std::begin, std::end; + sz = std::distance(begin(s), end(s)); + hash1 = rh.build(begin(s), end(s)).back(); + hash2 = rh.build(rbegin(s), rend(s)).back(); + } + + /** + * @brief 回文か否か + */ + bool is_palindrome() const { + return hash1 == hash2; + } + size_t size() const { + return sz; + } + void clear() { + sz = 0; + hash1 = 0; + hash2 = 0; + } + bool empty() const { + return sz == 0; + } + RHString& operator+=(const RHString& o) { + assert(&rh == &o.rh); + rh.expand(sz); + rh.expand(o.sz); + hash1 = rh.add(rh.mul(hash1, rh.power[o.sz]), o.hash1); + hash2 = rh.add(hash2, rh.mul(o.hash2, rh.power[sz])); + sz += o.sz; + return *this; + } + RHString& operator=(const RHString& o) { + assert(&rh == &o.rh); + sz = o.sz; + hash1 = o.hash1; + hash2 = o.hash2; + return *this; + } + /** + * @brief 文字列などで初期化する + */ + template + RHString& assign(const R& s) { + using std::begin, std::end; + sz = std::distance(begin(s), end(s)); + hash1 = rh.build(begin(s), end(s)).back(); + hash2 = rh.build(rbegin(s), rend(s)).back(); + return *this; + } + friend RHString operator+(const RHString& t1, const RHString& t2) { + RHString ret = t1; + ret += t2; + return ret; + } + friend bool operator==(const RHString& t1, const RHString& t2) { + assert(&t1.rh == &t2.rh); + return t1.hash1 == t2.hash1 && t1.hash2 == t2.hash2; + } + friend bool operator!=(const RHString& t1, const RHString& t2) { return !(t1 == t2); } }; diff --git a/test/atcoder-abc331-f.test.cpp b/test/atcoder-abc331-f.test.cpp new file mode 100644 index 0000000..a70a9ef --- /dev/null +++ b/test/atcoder-abc331-f.test.cpp @@ -0,0 +1,36 @@ +#define PROBLEM "https://atcoder.jp/contests/abc331/tasks/abc331_f" + +#include + +#include "../cpp/rolling-hash.hpp" +#include "../cpp/segtree.hpp" + +RollingHash rh; +struct E { + RHString operator()() const { return RHString(rh); } +}; + +int main() { + int N, Q; + std::string S; + std::cin >> N >> Q >> S; + std::vector init; + for (char c : S) { + init.emplace_back(rh, std::string{c}); + } + StaticSegTree, E> seg(init); + while (Q--) { + int q; + std::cin >> q; + if (q == 1) { + int x; + char c; + std::cin >> x >> c; + seg.set(x - 1, RHString(rh, std::string{c})); + } else { + int L, R; + std::cin >> L >> R; + std::cout << (seg.prod(L - 1, R).is_palindrome() ? "Yes" : "No") << std::endl; + } + } +} \ No newline at end of file From 1e19897b8a3f45d8112fcb6d3bdfab5afd916211 Mon Sep 17 00:00:00 2001 From: GitHub Date: Fri, 19 Jan 2024 23:19:32 +0000 Subject: [PATCH 02/10] [auto-verifier] verify commit 8a1b4420930272c8fe7ec5056d53567d2ac8efa3 --- .verify-helper/timestamps.remote.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 5192d41..786941e 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -22,6 +22,7 @@ "test/atcoder-abc177-f.2.test.cpp": "2023-08-01 17:59:54 +0900", "test/atcoder-abc282-d.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-abc300-b.test.cpp": "2023-10-12 08:50:40 +0900", +"test/atcoder-abc331-f.test.cpp": "2024-01-20 08:16:31 +0900", "test/atcoder-edpc-g.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-past202012-n.test.cpp": "2023-08-01 18:34:30 +0900", "test/atcoder-past202012-n.test.py": "2023-09-07 14:26:13 +0900", @@ -29,7 +30,7 @@ "test/yosupo-convolution-mod-1000000007.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod-2-64.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod.test.cpp": "2023-09-16 00:07:15 +0900", -"test/yosupo-enumerate-palindromes.test.cpp": "2023-05-31 16:27:00 +0900", +"test/yosupo-enumerate-palindromes.test.cpp": "2024-01-20 08:16:31 +0900", "test/yosupo-enumerate-quotients.test.cpp": "2023-05-03 12:22:21 +0900", "test/yosupo-enumerate-quotients.test.py": "2023-05-23 13:25:17 +0900", "test/yosupo-lca.1.test.cpp": "2023-06-16 15:41:49 +0900", From d30a94ca6129302823b1bc91945cb8461c1e3e73 Mon Sep 17 00:00:00 2001 From: shogo314 Date: Sun, 11 Feb 2024 12:44:50 +0900 Subject: [PATCH 03/10] add assign --- cpp/rolling-hash.hpp | 72 ++++++++++++++++++++++++++++++++++++++------ cpp/traits.hpp | 19 ++++++++++++ 2 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 cpp/traits.hpp diff --git a/cpp/rolling-hash.hpp b/cpp/rolling-hash.hpp index 1e79cb5..f3d174a 100644 --- a/cpp/rolling-hash.hpp +++ b/cpp/rolling-hash.hpp @@ -5,6 +5,8 @@ #include #include +#include "traits.hpp" + struct RHString; /** @@ -116,13 +118,19 @@ struct RHString { RHString(RollingHash& rh) : rh(rh), sz(0), hash1(0), hash2(0) {} RHString(RollingHash& rh, size_t sz, unsigned long long hash1, unsigned long long hash2) : rh(rh), sz(sz), hash1(hash1), hash2(hash2) {} RHString(const RHString& o) : rh(o.rh), sz(o.sz), hash1(o.hash1), hash2(o.hash2) {} - template - RHString(RollingHash& rh, R s) : rh(rh) { - using std::begin, std::end; + template >> + RHString(RollingHash& rh, R&& s) : rh(rh) { + using std::begin, std::end, std::rbegin, std::rend; sz = std::distance(begin(s), end(s)); hash1 = rh.build(begin(s), end(s)).back(); hash2 = rh.build(rbegin(s), rend(s)).back(); } + template >> + RHString(RollingHash& rh, T x) : rh(rh) { + sz = 1; + hash1 = x; + hash2 = x; + } /** * @brief 回文か否か @@ -150,22 +158,68 @@ struct RHString { sz += o.sz; return *this; } - RHString& operator=(const RHString& o) { + /** + * @brief 再代入する + */ + void assign(const RHString& o) { assert(&rh == &o.rh); sz = o.sz; hash1 = o.hash1; hash2 = o.hash2; - return *this; } /** - * @brief 文字列などで初期化する + * @brief 文字列(std::string)などで再代入する */ - template - RHString& assign(const R& s) { + template >> + void assign(R&& s) { using std::begin, std::end; sz = std::distance(begin(s), end(s)); hash1 = rh.build(begin(s), end(s)).back(); hash2 = rh.build(rbegin(s), rend(s)).back(); + } + /** + * @brief 文字(char)などで再代入する + */ + template >> + void assign(T x) { + sz = 1; + hash1 = x; + hash2 = x; + } + /** + * @brief const char*で再代入する + */ + void assign(const char* s) { + assign(std::string(s)); + } + /** + * @brief 再代入する + */ + RHString& operator=(const RHString& o) { + assign(o); + return *this; + } + /** + * @brief 文字列(std::string)などで再代入する + */ + template >> + RHString& operator=(R&& s) { + assign(s); + return *this; + } + /** + * @brief 文字(char)などで再代入する + */ + template >> + RHString& operator=(T x) { + assign(x); + return *this; + } + /** + * @brief const char*で再代入する + */ + RHString& operator=(const char* s) { + assign(s); return *this; } friend RHString operator+(const RHString& t1, const RHString& t2) { @@ -175,7 +229,7 @@ struct RHString { } friend bool operator==(const RHString& t1, const RHString& t2) { assert(&t1.rh == &t2.rh); - return t1.hash1 == t2.hash1 && t1.hash2 == t2.hash2; + return t1.sz == t2.sz && t1.hash1 == t2.hash1 && t1.hash2 == t2.hash2; } friend bool operator!=(const RHString& t1, const RHString& t2) { return !(t1 == t2); } }; diff --git a/cpp/traits.hpp b/cpp/traits.hpp new file mode 100644 index 0000000..590a8c5 --- /dev/null +++ b/cpp/traits.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include +#include + +namespace detail { +using std::begin, std::end; + +template +struct is_range_impl : std::false_type {}; +template +struct is_range_impl()), end(std::declval()))>> : std::true_type {}; +} // namespace detail + +template +struct is_range : detail::is_range_impl::type {}; +template +inline constexpr bool is_range_v = is_range::value; From e3bc0e787867b87954864eb87e1a309727ba6648 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 11 Feb 2024 03:47:16 +0000 Subject: [PATCH 04/10] [auto-verifier] verify commit d30a94ca6129302823b1bc91945cb8461c1e3e73 --- .verify-helper/timestamps.remote.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 786941e..7bb2884 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -22,7 +22,7 @@ "test/atcoder-abc177-f.2.test.cpp": "2023-08-01 17:59:54 +0900", "test/atcoder-abc282-d.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-abc300-b.test.cpp": "2023-10-12 08:50:40 +0900", -"test/atcoder-abc331-f.test.cpp": "2024-01-20 08:16:31 +0900", +"test/atcoder-abc331-f.test.cpp": "2024-02-11 12:44:50 +0900", "test/atcoder-edpc-g.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-past202012-n.test.cpp": "2023-08-01 18:34:30 +0900", "test/atcoder-past202012-n.test.py": "2023-09-07 14:26:13 +0900", @@ -30,7 +30,7 @@ "test/yosupo-convolution-mod-1000000007.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod-2-64.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod.test.cpp": "2023-09-16 00:07:15 +0900", -"test/yosupo-enumerate-palindromes.test.cpp": "2024-01-20 08:16:31 +0900", +"test/yosupo-enumerate-palindromes.test.cpp": "2024-02-11 12:44:50 +0900", "test/yosupo-enumerate-quotients.test.cpp": "2023-05-03 12:22:21 +0900", "test/yosupo-enumerate-quotients.test.py": "2023-05-23 13:25:17 +0900", "test/yosupo-lca.1.test.cpp": "2023-06-16 15:41:49 +0900", From b67f341f8a25f51c1f7b3d68b69cec61d6a3d986 Mon Sep 17 00:00:00 2001 From: shogo314 Date: Sun, 11 Feb 2024 12:50:58 +0900 Subject: [PATCH 05/10] change test --- test/atcoder-abc331-f.test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/atcoder-abc331-f.test.cpp b/test/atcoder-abc331-f.test.cpp index a70a9ef..1ad0e60 100644 --- a/test/atcoder-abc331-f.test.cpp +++ b/test/atcoder-abc331-f.test.cpp @@ -15,8 +15,9 @@ int main() { std::string S; std::cin >> N >> Q >> S; std::vector init; + init.reserve(N); for (char c : S) { - init.emplace_back(rh, std::string{c}); + init.emplace_back(rh, c); } StaticSegTree, E> seg(init); while (Q--) { @@ -26,7 +27,7 @@ int main() { int x; char c; std::cin >> x >> c; - seg.set(x - 1, RHString(rh, std::string{c})); + seg.set(x - 1, RHString(rh, c)); } else { int L, R; std::cin >> L >> R; From 358eccfceda3289af5e66040d79b0fb1ef1dd0da Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 11 Feb 2024 03:53:05 +0000 Subject: [PATCH 06/10] [auto-verifier] verify commit b67f341f8a25f51c1f7b3d68b69cec61d6a3d986 --- .verify-helper/timestamps.remote.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 7bb2884..7de8067 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -22,7 +22,7 @@ "test/atcoder-abc177-f.2.test.cpp": "2023-08-01 17:59:54 +0900", "test/atcoder-abc282-d.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-abc300-b.test.cpp": "2023-10-12 08:50:40 +0900", -"test/atcoder-abc331-f.test.cpp": "2024-02-11 12:44:50 +0900", +"test/atcoder-abc331-f.test.cpp": "2024-02-11 12:50:58 +0900", "test/atcoder-edpc-g.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-past202012-n.test.cpp": "2023-08-01 18:34:30 +0900", "test/atcoder-past202012-n.test.py": "2023-09-07 14:26:13 +0900", From a6c563c58998842ba7d182a24c036688cc2c5171 Mon Sep 17 00:00:00 2001 From: shogo314 Date: Mon, 12 Feb 2024 01:16:06 +0900 Subject: [PATCH 07/10] add assign(std::string_view) --- cpp/rolling-hash.hpp | 76 ++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 28 deletions(-) diff --git a/cpp/rolling-hash.hpp b/cpp/rolling-hash.hpp index f3d174a..5eb2a07 100644 --- a/cpp/rolling-hash.hpp +++ b/cpp/rolling-hash.hpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include "traits.hpp" @@ -118,19 +120,33 @@ struct RHString { RHString(RollingHash& rh) : rh(rh), sz(0), hash1(0), hash2(0) {} RHString(RollingHash& rh, size_t sz, unsigned long long hash1, unsigned long long hash2) : rh(rh), sz(sz), hash1(hash1), hash2(hash2) {} RHString(const RHString& o) : rh(o.rh), sz(o.sz), hash1(o.hash1), hash2(o.hash2) {} - template >> - RHString(RollingHash& rh, R&& s) : rh(rh) { + /** + * @brief vectorなどで初期化する + */ + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + RHString(RollingHash& rh, R&& v) : rh(rh) { using std::begin, std::end, std::rbegin, std::rend; - sz = std::distance(begin(s), end(s)); - hash1 = rh.build(begin(s), end(s)).back(); - hash2 = rh.build(rbegin(s), rend(s)).back(); + sz = std::distance(begin(v), end(v)); + hash1 = rh.build(begin(v), end(v)).back(); + hash2 = rh.build(rbegin(v), rend(v)).back(); } - template >> + /** + * @brief charやunsigned long longなどで初期化する + */ + template && !std::is_convertible_v, std::nullptr_t> = nullptr> RHString(RollingHash& rh, T x) : rh(rh) { sz = 1; hash1 = x; hash2 = x; } + /** + * @brief 文字列(string, const char*, string_view)で初期化する + */ + RHString(RollingHash& rh, std::string_view s) : rh(rh) { + sz = std::distance(s.begin(), s.end()); + hash1 = rh.build(s.begin(), s.end()).back(); + hash2 = rh.build(s.rbegin(), s.rend()).back(); + } /** * @brief 回文か否か @@ -160,6 +176,7 @@ struct RHString { } /** * @brief 再代入する + * RollingHashは同じものである必要がある */ void assign(const RHString& o) { assert(&rh == &o.rh); @@ -168,57 +185,60 @@ struct RHString { hash2 = o.hash2; } /** - * @brief 文字列(std::string)などで再代入する + * @brief vectorなどを再代入する */ - template >> - void assign(R&& s) { - using std::begin, std::end; - sz = std::distance(begin(s), end(s)); - hash1 = rh.build(begin(s), end(s)).back(); - hash2 = rh.build(rbegin(s), rend(s)).back(); + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + void assign(R&& v) { + using std::begin, std::end, std::rbegin, std::rend; + sz = std::distance(begin(v), end(v)); + hash1 = rh.build(begin(v), end(v)).back(); + hash2 = rh.build(rbegin(v), rend(v)).back(); } /** - * @brief 文字(char)などで再代入する + * @brief charやunsigned long longなどを再代入する */ - template >> - void assign(T x) { + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + void assign(T&& x) { sz = 1; hash1 = x; hash2 = x; } /** - * @brief const char*で再代入する + * @brief 文字列(string, const char*, string_view)を再代入する */ - void assign(const char* s) { - assign(std::string(s)); + void assign(std::string_view s) { + sz = std::distance(s.begin(), s.end()); + hash1 = rh.build(s.begin(), s.end()).back(); + hash2 = rh.build(s.rbegin(), s.rend()).back(); } /** * @brief 再代入する + * RollingHashは同じものである必要がある */ RHString& operator=(const RHString& o) { assign(o); return *this; } /** - * @brief 文字列(std::string)などで再代入する + * @brief vectorなどを再代入する */ - template >> - RHString& operator=(R&& s) { - assign(s); + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + RHString& operator=(R&& v) { + assign(v); return *this; } /** - * @brief 文字(char)などで再代入する + * @brief charやunsigned long longなどを再代入する */ - template >> - RHString& operator=(T x) { + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + RHString& operator=(T&& x) { assign(x); return *this; } /** - * @brief const char*で再代入する + * @brief 文字列(string, const char*, string_view)を再代入する */ - RHString& operator=(const char* s) { + RHString& operator=(std::string_view s) { assign(s); return *this; } From 6a7c1179499afb527c3671b69a8da18e4f38d13c Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 11 Feb 2024 16:18:17 +0000 Subject: [PATCH 08/10] [auto-verifier] verify commit a6c563c58998842ba7d182a24c036688cc2c5171 --- .verify-helper/timestamps.remote.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 7de8067..722f423 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -22,7 +22,6 @@ "test/atcoder-abc177-f.2.test.cpp": "2023-08-01 17:59:54 +0900", "test/atcoder-abc282-d.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-abc300-b.test.cpp": "2023-10-12 08:50:40 +0900", -"test/atcoder-abc331-f.test.cpp": "2024-02-11 12:50:58 +0900", "test/atcoder-edpc-g.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-past202012-n.test.cpp": "2023-08-01 18:34:30 +0900", "test/atcoder-past202012-n.test.py": "2023-09-07 14:26:13 +0900", @@ -30,7 +29,7 @@ "test/yosupo-convolution-mod-1000000007.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod-2-64.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod.test.cpp": "2023-09-16 00:07:15 +0900", -"test/yosupo-enumerate-palindromes.test.cpp": "2024-02-11 12:44:50 +0900", +"test/yosupo-enumerate-palindromes.test.cpp": "2024-02-12 01:16:06 +0900", "test/yosupo-enumerate-quotients.test.cpp": "2023-05-03 12:22:21 +0900", "test/yosupo-enumerate-quotients.test.py": "2023-05-23 13:25:17 +0900", "test/yosupo-lca.1.test.cpp": "2023-06-16 15:41:49 +0900", From 85479eb9ccc862a85ca566b05051b91442e24c5c Mon Sep 17 00:00:00 2001 From: shogo314 Date: Mon, 12 Feb 2024 01:35:20 +0900 Subject: [PATCH 09/10] fix --- cpp/rolling-hash.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/rolling-hash.hpp b/cpp/rolling-hash.hpp index 5eb2a07..19037f9 100644 --- a/cpp/rolling-hash.hpp +++ b/cpp/rolling-hash.hpp @@ -133,8 +133,8 @@ struct RHString { /** * @brief charやunsigned long longなどで初期化する */ - template && !std::is_convertible_v, std::nullptr_t> = nullptr> - RHString(RollingHash& rh, T x) : rh(rh) { + template && !std::is_convertible_v, std::nullptr_t> = nullptr> + RHString(RollingHash& rh, T&& x) : rh(rh) { sz = 1; hash1 = x; hash2 = x; @@ -197,7 +197,7 @@ struct RHString { /** * @brief charやunsigned long longなどを再代入する */ - template && !std::is_convertible_v, std::nullptr_t> = nullptr> + template && !std::is_convertible_v, std::nullptr_t> = nullptr> void assign(T&& x) { sz = 1; hash1 = x; @@ -230,7 +230,7 @@ struct RHString { /** * @brief charやunsigned long longなどを再代入する */ - template && !std::is_convertible_v, std::nullptr_t> = nullptr> + template && !std::is_convertible_v, std::nullptr_t> = nullptr> RHString& operator=(T&& x) { assign(x); return *this; From dab23a444bc143b73657988448a2dcb1af58d7be Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 11 Feb 2024 16:37:42 +0000 Subject: [PATCH 10/10] [auto-verifier] verify commit 85479eb9ccc862a85ca566b05051b91442e24c5c --- .verify-helper/timestamps.remote.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 722f423..e49549c 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -22,6 +22,7 @@ "test/atcoder-abc177-f.2.test.cpp": "2023-08-01 17:59:54 +0900", "test/atcoder-abc282-d.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-abc300-b.test.cpp": "2023-10-12 08:50:40 +0900", +"test/atcoder-abc331-f.test.cpp": "2024-02-12 01:35:20 +0900", "test/atcoder-edpc-g.test.cpp": "2023-11-30 23:29:28 +0900", "test/atcoder-past202012-n.test.cpp": "2023-08-01 18:34:30 +0900", "test/atcoder-past202012-n.test.py": "2023-09-07 14:26:13 +0900", @@ -29,7 +30,7 @@ "test/yosupo-convolution-mod-1000000007.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod-2-64.test.cpp": "2023-09-16 00:07:15 +0900", "test/yosupo-convolution-mod.test.cpp": "2023-09-16 00:07:15 +0900", -"test/yosupo-enumerate-palindromes.test.cpp": "2024-02-12 01:16:06 +0900", +"test/yosupo-enumerate-palindromes.test.cpp": "2024-02-12 01:35:20 +0900", "test/yosupo-enumerate-quotients.test.cpp": "2023-05-03 12:22:21 +0900", "test/yosupo-enumerate-quotients.test.py": "2023-05-23 13:25:17 +0900", "test/yosupo-lca.1.test.cpp": "2023-06-16 15:41:49 +0900",