thảo luận Leetcode contest, đường tới Guardian

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Bài 3 tụi top nó có thằng nào làm sai đâu, 7k thằng làm đc đừng unrate nhé :ah:

via theNEXTvoz for iPhone
7k người làm dc nhưng chắc 5k gcd r ko unrate hơi phí
JEWoIdl.png
 
Câu 4 chiều nay cx phải mất 1 tiếng ms giải đc
Về cơ bản là nếu cost1 < cost2 / 2 thì dùng nguyên cost1 thôi, cho tăng tất cả các số để bằng số lớn nhất
TH cost1 > cost2 / 2 thì phải áp dùng cost2 nhiều nhất có thể, bài này full greedy nên giải thích cx hơi khó :)
Python:
from sortedcontainers import SortedList

class Solution:
    def minCostToEqualizeArray(self, nums: List[int], cost1: int, cost2: int) -> int:
        max_num = max(nums)
        n = len(nums)

        if cost1 * 2 <= cost2:
            return (max_num * len(nums) - sum(nums)) * cost1 % int(1e9 + 7)
        
        lefts = [max_num - num for num in nums if num < max_num]
        if len(lefts) == 0:
            return 0

        max_left = max(lefts)
        sum_lefts = sum(lefts)
        cost2_count = 0
        cost1_count = 0

        if max_left * 2 <= sum_lefts:
            cost2_count = sum_lefts // 2
            cost1_count = sum_lefts % 2
        else:
            cost2_count = sum_lefts - max_left
            cost1_count = max_left - cost2_count

        base_cost = cost1_count * cost1 + cost2_count * cost2
        if (n - 1) * cost2 >= (n - 2) * cost1:
            return base_cost % int(1e9 + 7)

        min_cost = base_cost
        increase = cost1_count // (n - 2)
        cost1_count -= increase * (n - 2)
        cost2_count += increase * (n - 1)
        min_cost = min(min_cost, cost1_count * cost1 + cost2_count * cost2)

        for _ in range(2):
            cost2_count += (n + cost1_count) // 2
            cost1_count = (n - 1 - cost1_count - 1) % 2
            min_cost = min(min_cost, cost1_count * cost1 + cost2_count * cost2)

        return min_cost % int(1e9 + 7)
 
Câu 4 chiều nay cx phải mất 1 tiếng ms giải đc
Về cơ bản là nếu cost1 < cost2 / 2 thì dùng nguyên cost1 thôi, cho tăng tất cả các số để bằng số lớn nhất
TH cost1 > cost2 / 2 thì phải áp dùng cost2 nhiều nhất có thể, bài này full greedy nên giải thích cx hơi khó :)
Python:
from sortedcontainers import SortedList

class Solution:
    def minCostToEqualizeArray(self, nums: List[int], cost1: int, cost2: int) -> int:
        max_num = max(nums)
        n = len(nums)

        if cost1 * 2 <= cost2:
            return (max_num * len(nums) - sum(nums)) * cost1 % int(1e9 + 7)
       
        lefts = [max_num - num for num in nums if num < max_num]
        if len(lefts) == 0:
            return 0

        max_left = max(lefts)
        sum_lefts = sum(lefts)
        cost2_count = 0
        cost1_count = 0

        if max_left * 2 <= sum_lefts:
            cost2_count = sum_lefts // 2
            cost1_count = sum_lefts % 2
        else:
            cost2_count = sum_lefts - max_left
            cost1_count = max_left - cost2_count

        base_cost = cost1_count * cost1 + cost2_count * cost2
        if (n - 1) * cost2 >= (n - 2) * cost1:
            return base_cost % int(1e9 + 7)

        min_cost = base_cost
        increase = cost1_count // (n - 2)
        cost1_count -= increase * (n - 2)
        cost2_count += increase * (n - 1)
        min_cost = min(min_cost, cost1_count * cost1 + cost2_count * cost2)

        for _ in range(2):
            cost2_count += (n + cost1_count) // 2
            cost1_count = (n - 1 - cost1_count - 1) % 2
            min_cost = min(min_cost, cost1_count * cost1 + cost2_count * cost2)

        return min_cost % int(1e9 + 7)
bài này nhìn đề giống dp thế mà ko dùng dp để giải dc hả bác ?
 
bài này nhìn đề giống dp thế mà ko dùng dp để giải dc hả bác ?
Giống dp chỗ nào bác nhể. Nếu để ý 2 cái cost thì có thể nhận ra đc là bài greedy rồi bác. Vs dp bác phải tìm ra 1 trạng thái cụ thể theo yêu cầu đề bài nên ỏ bài này rất khó tìm ra trạng thái đó
 
Bài 4 greedy nhưng mà ko biết greedy bằng cách nào cả. Nếu nghĩ ra cách tính min cost cho mỗi max value O(1) thì chắc ngon
Mình tính bằng heap nhưng nhận ra là ko chỉ có solution tăng tới max value nên bỏ cuộc luôn =((
1714915971014.png
 
Lúc mình biết bạn rating gần 2k sau tầm 3-4 contest. Mình nghĩ bạn phải giải tầm 1k5-2k câu hỏi trên leetcode rồi. Ai ngờ đâu chỉ giải có 244 câu mà đã khủng thế này.
Bạn phải coi là base của bạn đó như thế nào, và trước khi luyện leetcode đã từng luyện trên trang nào khác chưa.
Ví dụ thanh niên này: https://leetcode.com/u/tmwilliamlin168/
Profile leetcode thì mới có 200 bài thôi. Nhưng ở codeforces (https://codeforces.com/profile/tmwilliamlin168) đã làm hơn 1k7 bài rồi, và bạn này cũng tham gia nhiều cuộc thi về algo và có giải rồi (nổi bật nhất chắc là vàng IOI)
 
Bạn phải coi là base của bạn đó như thế nào, và trước khi luyện leetcode đã từng luyện trên trang nào khác chưa.
Ví dụ thanh niên này: https://leetcode.com/u/tmwilliamlin168/
Profile leetcode thì mới có 200 bài thôi. Nhưng ở codeforces (tmwilliamlin168 - Codeforces (https://codeforces.com/profile/tmwilliamlin168)) đã làm hơn 1k7 bài rồi, và bạn này cũng tham gia nhiều cuộc thi về algo và có giải rồi (nổi bật nhất chắc là vàng IOI)
Em cũng đồng ý ạ, hồi cấp 3 em có học tin một tí (cũng có làm vnoj/codeforces).
Sau khoảng 5-6 năm không học hành gì thì giờ em mới bắt đầu học lại.
 
Em cũng đồng ý ạ, hồi cấp 3 em có học tin một tí (cũng có làm vnoj/codeforces).
Sau khoảng 5-6 năm không học hành gì thì giờ em mới bắt đầu học lại.
Yeah, nhưng mà mình vẫn công nhận là bạn giỏi. Nhiều người (trong đó có mình) vẫn cày đều nhưng cảm giác vẫn k bứt lên được. Bạn bỏ ngang lâu nhưng giờ quay lại vẫn làm được thì tư duy cũng rất tốt rồi.
 
Yeah, nhưng mà mình vẫn công nhận là bạn giỏi. Nhiều người (trong đó có mình) vẫn cày đều nhưng cảm giác vẫn k bứt lên được. Bạn bỏ ngang lâu nhưng giờ quay lại vẫn làm được thì tư duy cũng rất tốt rồi.
Bạn ý tự làm được bài 4 contest rồi là tư duy đỉnh rồi mà bác, bài đấy 4 case xử lý mệt kinh :v Cả contest cũng có đúng hơn 300 người làm xong kịp
 
Lúc mình biết bạn rating gần 2k sau tầm 3-4 contest. Mình nghĩ bạn phải giải tầm 1k5-2k câu hỏi trên leetcode rồi. Ai ngờ đâu chỉ giải có 244 câu mà đã khủng thế này.
Em cũng nghĩ bác @honda stone cũng phải cày tầm > 1k mới solve đc cả 4Q và 3Q đều đều vậy. Hiện em cày nhưng bị "chững lại", không giải đều đc Q3, thường 2Q, câu Q3 thì hên xui ạ, còn solve cả 4Q thì chưa được lần nào. Không biết bác nào đang mắc ở contest như em không ạ. Giờ mình cày thêm bài hard hay sao á. (Em cũng có luyện theo từng topic rồi, dạo này thì đang tích cực giải câu hard, nhưng 1 ngày tốt lắm là đc 1 bài => giải lại, còn không phải 2 ngày mới hiểu đc và giải lại)
1714997653661.png
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

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