có cách đấyLeetcode contest lần này được 3Q, còn Q4 thì bí rồi, không nghĩ ra được cách nào nhanh hơn O(n^2) hết![]()

Giải 3 câu trôi chảy mà câu 4 mình đọc mãi đề phải print ra mới thấy nhảm thế ko biếtbox này trôi lạc thế. Nay đọc sai đề câu 3, mất mẹ 20 phút xàm lờ![]()

câu 4 chính ra cx hay phết. còn thuật toán manacher thì chat gpt thôiGiải 3 câu trôi chảy mà câu 4 mình đọc mãi đề phải print ra mới thấy nhảm thế ko biết![]()

sieve 1001 thôi, sieve 10^6 là ăn TLE ngaycâu 3 dính TLE sieve :/

Câu 3 phải giải bằng O(nsqrt(n)) là ăn nhỉsieve 1001 thôi, sieve 10^6 là ăn TLE ngay![]()
Em cũng thế, làm Sàng nguyên tố 10^6 mà toàn TLE mấy TC bé tý. Mãi mới nghĩ chắc LC tính TLE dựa vào tổng thời gian chạy các TC, nên đến phần tử nào thì tìm cái proper divisor của nó luôn.câu 3 dính TLE sieve :/
Ở mỗi số mình tìm max factor luôn, time complexity đoạn này là sqrt(num). Mình ko nghĩ tới xài sieve gì cả vì ko thấy usecases chỗ prime factorEm cũng thế, làm Sàng nguyên tố 10^6 mà toàn TLE mấy TC bé tý. Mãi mới nghĩ chắc LC tính TLE dựa vào tổng thời gian chạy các TC, nên đến phần tử nào thì tìm cái proper divisor của nó luôn.
Câu 4 dùng rolling hash cũng được nhỉcâu 4 chính ra cx hay phết. còn thuật toán manacher thì chat gpt thôi![]()
Đúng rồi bác, tại em làm theo lối mòn cứ có nguyên tố là bê cái sieve ra dùng thôi. Nay bác làm được Q4 thì lại gỡ được contest tuần trước.Ở mỗi số mình tìm max factor luôn, time complexity đoạn này là sqrt(num). Mình ko nghĩ tới xài sieve gì cả vì ko thấy usecases chỗ prime factor
Sao cái sol Q4 của fen pass được hay vậy.

đủ time complexity thì chắc đc thôi bácCâu 4 dùng rolling hash cũng được nhỉ
Chắc nó rejudge cmnr rồi, nó accepted rồi nên mình ko sửa, nãy mình tính lộn time complexity đổi qua rolling hash mà éo kịp

mình xin điểm nhé bácChắc nó rejudge cmnr rồi, nó accepted rồi nên mình ko sửa, nãy mình tính lộn time complexity đổi qua rolling hash mà éo kịp![]()


class Solution:
def findAnswer(self, parent: List[int], s: str) -> List[bool]:
n = len(parent)
children = defaultdict(list)
base = 31
MOD = 10 ** 9 + 7
p = [1] * (n + 1)
children_count = [0] * n
for i in range(1, n+1):
p[i] = (p[i-1] * base) % MOD
for i, p_node in enumerate(parent):
if p_node == -1:
continue
children[p_node].append(i)
def count_children(node):
children_count[node] = 1
for child in children[node]:
count_children(child)
children_count[node] += children_count[child]
count_children(0)
hash_array = [0] * (n + 1)
reversed_hash_array = [0] * (n + 1)
def dfs(node):
for child in children[node]:
dfs(child)
hash_array[node] = (hash_array[node] * p[children_count[child]] + hash_array[child]) % MOD
hash_array[node] = (hash_array[node] * base + ord(s[node]) - ord('a')) % MOD
def reverse_dfs(node):
reversed_hash_array[node] = (ord(s[node]) - ord('a')) % MOD
for child in reversed(children[node]):
reverse_dfs(child)
reversed_hash_array[node] = (reversed_hash_array[node] * p[children_count[child]] + reversed_hash_array[child]) % MOD
dfs(0)
reverse_dfs(0)
# print(hash_array)
# print(reversed_hash_array)
return [hash_array[i] == reversed_hash_array[i] for i in range(n)]
Câu 4 hay thật nhỉ, đi cái hash ngược left right top đi về top right left là ngon. Thấy học thêm được 1 cái variant mới ko đến nỗi khó lắmmình xin điểm nhé bác![]()

Chắc mình bị rejudge rồi fence nhưng chắc vẫn cộng được mấy chục điểm, may làm q3 nhanh tay. Bài 4 hôm nay tính sai TC nữa rồi rút kinh nghiệmĐúng rồi bác, tại em làm theo lối mòn cứ có nguyên tố là bê cái sieve ra dùng thôi. Nay bác làm được Q4 thì lại gỡ được contest tuần trước.

