. Tuy k<= 10^9, nhưng may phát hiện ra tập trạng thái để quy hoạch động lại khá nhỏ.E cũng hao hao bác , q2 ăn 3 bugMá nó cái câu 2 cay thật.
Ăn 4 câu mà giải câu 2 mất cả tiếng đồng hồ gang thật
Ừ đúng rồi fence, thực ra nhảy lên 2^i thì i chỉ có 9 thôi, thêm cái boolean nữa thì dp 3 chiều là dễ dàng.Xem tệp đính kèm 2500185
Lần đầu em giải được Q4. Tuy k<= 10^9, nhưng may phát hiện ra tập trạng thái để quy hoạch động lại khá nhỏ.

câu 2 em cũng bị 3 bug.Má nó cái câu 2 cay thật.
Ăn 4 câu mà giải câu 2 mất cả tiếng đồng hồ gang thật
Q3: đếm số chữ số theo từng hàng, từ hàng đơn vị lên hàng chục, hàng trăm,...Xem tệp đính kèm 2500094Nghỉ sớm thôi, câu Q3 không có ý tưởng nơi
Q4: Sau m lần nhảy lên và n lần đi xuống thì sẽ dừng ở bậc thang 1 + 2^0 + 2^1 + ... + 2^(m-1) - n = 2*m - ncâu 4 dp kiểu gì mấy bác nhỉ
Mình tìm số lần nhảy có thể dẫn đến bậc thang k, công thức là k = 2 **(jump) - back với 0 < back < jump + 1. Sau đấy duyệt từng số lượt jump, tính comb(jump + 1, back) là xongcâu 4 dp kiểu gì mấy bác nhỉ
bao giờ lên guardian em quay lại voz 
Bác làm hay thật, để e nghiên cứu code theo cách nàyQ3: đếm số chữ số theo từng hàng, từ hàng đơn vị lên hàng chục, hàng trăm,...
Ở mỗi hàng, đếm xong nếu thấy có m chữ số i, n chữ số j (với i khác j) thì result += m * n...
Q4: Sau m lần nhảy lên và n lần đi xuống thì sẽ dừng ở bậc thang 1 + 2^0 + 2^1 + ... + 2^(m-1) - n = 2*m - n
=> Với mỗi giá trị m tính n để 2*m - n = k rồi tính xem có bao nhiêu cách để nhảy lên m lần và đi xuống n lần (lưu ý: không được đi xuống 2 lần liên tục)
Q4 làm DP nhiều là thấy state fence ơithấy thiên hạ hơn 2k người giải được q4, thôi em lặn 1 thời gian để tu đâybao giờ lên guardian em quay lại voz
13p xong 3q nhưng TLE ở q4 đần vc

Q3 mà đếm result m*n thì phải xử lí trùng mệt lắm, nên mình xài one pass luôn.Q3: đếm số chữ số theo từng hàng, từ hàng đơn vị lên hàng chục, hàng trăm,...
Ở mỗi hàng, đếm xong nếu thấy có m chữ số i, n chữ số j (với i khác j) thì result += m * n...
Q4: Sau m lần nhảy lên và n lần đi xuống thì sẽ dừng ở bậc thang 1 + 2^0 + 2^1 + ... + 2^(m-1) - n = 2*m - n
=> Với mỗi giá trị m tính n để 2*m - n = k rồi tính xem có bao nhiêu cách để nhảy lên m lần và đi xuống n lần (lưu ý: không được đi xuống 2 lần liên tục)
Em cũng dính hai bọ bài 2, tạo 1 mảng cộng dồn: count = số cặp liền nhau "lỗi" từ 0 ->i. Rồi đem so sánh count[l] === count[r-1].Ừ đúng rồi fence, thực ra nhảy lên 2^i thì i chỉ có 9 thôi, thêm cái boolean nữa thì dp 3 chiều là dễ dàng.
Bài 3 dễ mà giải bài 2 tốn tgian quá gang thật, biết là xài prefixSum rồi mà quên mẹ mất cách biến đổi, khuya rồi đầu óc thật sự rất ngáo![]()
Không cần xử lý trùng ý anh, result += m*n là được đó. Counter bác đếm cũng là m*n màQ3 mà đếm result m*n thì phải xử lí trùng mệt lắm, nên mình xài one pass luôn.
Thường mấy bài mà tìm pair i, j thì chỉ cần duyệt 1 lần rồi lưu vô counter để khỏi phải xử lí trùng thôi.
Nó trùng là do cặp (i,j) (j,i) được đếm là 2 cặp riêng biệt. Trong khi bài này thì chỉ là 1 cặp. Nên sau khi đếm hết, result trả về chia 2 là xong. Code bài 3 của t đâyQ3 mà đếm result m*n thì phải xử lí trùng mệt lắm, nên mình xài one pass luôn.
Thường mấy bài mà tìm pair i, j thì chỉ cần duyệt 1 lần rồi lưu vô counter để khỏi phải xử lí trùng thôi.
class Solution:
def sumDigitDifferences(self, nums: List[int]) -> int:
c = defaultdict(int)
for num in nums:
for i, d in enumerate(str(num)):
c[(i,d)] += 1
ret = 0
for v in c.values():
ret += v * (len(nums) - v)
return ret//2

luyện 100 bài hard tự giải ko xem sol chắc là tàng tàng mỗi contest lên 50pTụi leetcode nó ko xử lí cheaters hay sao ấy ae. Tụi nó cheat nhiều vl mất cả vui. Rank thì khó lên nữa
via theNEXTvoz for iPhone

thì nó là math màQ4 solution siêu ngắn mà nghĩ hơn 1 tiếng không ra. Mình nghi nghi dùng DP nhưng lại cứ đi theo hướng Math, thế là tạch.