thảo luận Leetcode + Codeforces, Competitive programming contest. Đường tới Guardian + Candidate Master.

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Q3 tìm P/Q trước rồi lưu kết quả là 1 list các index của Q, xong rồi tìm S/R rồi binary search chắc cũng được, mải làm DP mà MME quá ko kịp optimize chứ nhìn cũng dễ ăn.
 
Python:
class Solution:
    def numberOfSubsequences(self, nums: List[int]) -> int:
        cache = defaultdict(list)
        n = len(nums)
        for i in range(n):
            for j in range(i + 2, n):
                cache[nums[i]/nums[j]].append(j)

        for key, value in cache.items():
            cache[key] = sorted(value)

        ans = 0
        for r in range(n - 3, -1, -1):
            for s in range(r + 2, n):
                if nums[s]/nums[r] in cache:
                    ans += bisect_right(cache[nums[s]/nums[r]], r - 2)
                
        return ans
Q3 qúa dễ đi, thế mà cứ cắm đầu DP óc heo thật =((
 
Python:
class Solution:
    def numberOfSubsequences(self, nums: List[int]) -> int:
        cache = defaultdict(list)
        n = len(nums)
        for i in range(n):
            for j in range(i + 2, n):
                cache[nums[i]/nums[j]].append(j)

        for key, value in cache.items():
            cache[key] = sorted(value)

        ans = 0
        for r in range(n - 3, -1, -1):
            for s in range(r + 2, n):
                if nums[s]/nums[r] in cache:
                    ans += bisect_right(cache[nums[s]/nums[r]], r - 2)
               
        return ans
Q3 qúa dễ đi, thế mà cứ cắm đầu DP óc heo thật =((
Cách này ngắn vl 😂, mà ko hiểu sao ít người làm được thế, có hơn 300 cháu
 
:v Q3 thấy rate thấp không làm, thế hóa ra lại dễ nghĩ hơn Q4
4gmOAMB.png
4gmOAMB.png
4gmOAMB.png
non quá đi tu tiếp
 
Cách này ngắn vl 😂, mà ko hiểu sao ít người làm được thế, có hơn 300 cháu
Optimal hình như O(n*n) thôi, có thằng thấy làm có 5 dòng :burn_joss_stick:
Python:
    def numberOfSubsequences(self, A: List[int]) -> int:
        n = len(A)
        cnt = Counter()
        res = 0
        for r in range(3, n - 2):
            q = r - 2
            for p in range(q - 1):
                cnt[A[p] / A[q]] += 1
            for s in range(r + 2, n):
                res += cnt[A[s] / A[r]]
        return res
 
Sửa lần cuối:
Hay thật, chỉ cần xét q = r -2 thôi vì các q trước đấy được xét từ các r trước rồi . Đề không khó, do mình chưa đủ IQ thôi 😂
Optimal hình như O(n*n) thôi, có thằng thấy làm có 5 dòng :burn_joss_stick:
Python:
    def numberOfSubsequences(self, A: List[int]) -> int:
        n = len(A)
        cnt = Counter()
        res = 0
        for r in range(3, n - 2):
            q = r - 2
            for p in range(q - 1):
                cnt[A[p] / A[q]] += 1
            for s in range(r + 2, n):
                res += cnt[A[s] / A[r]]
        return res
 

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
deple20k,
Trả lời
1.686
Lượt xem
106.985
Quay lại
Lên đầu trang