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
Câu C làm binary search được luôn à ảo thế nhỉ, mình cứ nghĩ cách dùng Kadane tính sum của tụi ko có cái element X. Còn include X vào như nào thì éo biết =((

Dùng cái Kadane gì đó 2 bên. X thì tính min max liền trái phải. Cuối cùng merge 3 dãy lại, mình nghĩ vậy.
 
Đoạn include X vào thì không cần dùng Kadane fen à.
Thuật của Bu như này:
Giả sử X ở vị trí pos, chia dãy ra làm 2 trường hợp:
  • Các đoạn con không chứa X: 1 -> pos - 1 và pos + 1 -> N. Xử lí cái này dùng Kadane tìm tổng nhỏ nhất có thể (min) và tổng lớn nhất có thể (max) rồi thêm các tổng từ min -> max vào tập kết quả.
  • Các đoạn con chứa X: Tìm về hai bên trái phải của pos để tìm đoạn con chứa X có tổng nhỏ nhất có thể (min) và tổng lớn nhất có thể (max) rồi thêm các tổng từ min -> max vào tập kết quả.

Code C++
 
Đoạn include X vào thì không cần dùng Kadane fen à.
Thuật của Bu như này:
Giả sử X ở vị trí pos, chia dãy ra làm 2 trường hợp:
  • Các đoạn con không chứa X: 1 -> pos - 1 và pos + 1 -> N. Xử lí cái này dùng Kadane tìm tổng nhỏ nhất có thể (min) và tổng lớn nhất có thể (max) rồi thêm các tổng từ min -> max vào tập kết quả.
  • Các đoạn con chứa X: Tìm về hai bên trái phải của pos để tìm đoạn con chứa X có tổng nhỏ nhất có thể (min) và tổng lớn nhất có thể (max) rồi thêm các tổng từ min -> max vào tập kết quả.

Code C++
Lol tự dưng mình quên mất cái prefixsum, đi từ pos tới n để tìm max prefixsum trong dãy, đi từ pos - 1 về 0 để tìm min prefixSum trong dãy là tính đc max nhỉ.
Làm ngược lại sẽ tính được min rồi bruteforce?
 
Lol tự dưng mình quên mất cái prefixsum, đi từ pos tới n để tìm max prefixsum trong dãy, đi từ pos - 1 về 0 để tìm min prefixSum trong dãy là tính đc max nhỉ.
Làm ngược lại sẽ tính được min rồi bruteforce?

Tìm 2 min, 2 max hai bên. Tính sum 2 min, sum 2 max, đẩy range lên X là ra mà thím.
Ví dụ (-2,4) 10 (-3,6) -> (5,20)
 
Chuẩn rồi fen
Đậu xanh skill issue rồi, tự dưng quên mẹ mất cái prefix sum để tính.
Câu 2 chỗ chia cho 7 nhìn ko ra, tụi này toàn cho toán ngọng quá thật buồn :ah:
Tìm 2 min, 2 max hai bên. Tính sum 2 min, sum 2 max, đẩy range lên X là ra mà thím.
Ví dụ (-2,4) 10 (-3,6) -> (5,20)
Ờ nhỉ, đơn giản vậy mà ko nghĩ ra :ah: nhưng mà trường hợp như max sum bên trái âm mà bên phải dương thì sao fence nhỉ. Mình nghĩ phải dùng combination chỗ này.

Cảm ơn fen @freedom.9 nhé, gần 1 năm không chơi Codeforces tự nhiên lướt forum thấy có thread vui quá nên comeback. Mất cả năm nằm thẳng đánh LOL tù hết người.
Cố gắng chăm chỉ tí lên CM cho thỏa mãn cái đã.
1 năm nằm thẳng mà giải 4Q Div 2 như nhai kẹo thế này :(
 
Đậu xanh skill issue rồi, tự dưng quên mẹ mất cái prefix sum để tính.
Câu 2 chỗ chia cho 7 nhìn ko ra, tụi này toàn cho toán ngọng quá thật buồn :ah:

Ờ nhỉ, đơn giản vậy mà ko nghĩ ra :ah: nhưng mà trường hợp như max sum bên trái âm mà bên phải dương thì sao fence nhỉ.


1 năm nằm thẳng mà giải 4Q Div 2 như nhai kẹo thế này :(
1735063521037.png

Bài B fen không cô đơn :sweat:
 
Đậu xanh skill issue rồi, tự dưng quên mẹ mất cái prefix sum để tính.
Câu 2 chỗ chia cho 7 nhìn ko ra, tụi này toàn cho toán ngọng quá thật buồn :ah:

Ờ nhỉ, đơn giản vậy mà ko nghĩ ra :ah: nhưng mà trường hợp như max sum bên trái âm mà bên phải dương thì sao fence nhỉ. Mình nghĩ phải dùng combination chỗ này.


1 năm nằm thẳng mà giải 4Q Div 2 như nhai kẹo thế này :(

Chưa hiểu ý thím lắm. Max sao âm được, tối thiểu nó là 0 (dãy rỗng).
 
Ae xài Python codeforces hạn chế xài set nhé, xài list thôi chấp nhận value bị trùng cũng được
Code của mình bị nó hack TLE, nếu đoạn prices = sorted(list(a + b)) thì pass

Python:
from bisect import bisect_left, bisect_right
 
 
t = int(input())
 
def solve():
    N, K = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    a = sorted(a)
    b = sorted(b)
    prices = sorted(set(a + b))
    ans = 0
    for price in prices:
        totalBought = N - bisect_left(b, price)
        boughtWithPossitiveReviews = N - bisect_left(a, price)
        if totalBought - boughtWithPossitiveReviews <= K:
            ans = max(ans, price* totalBought)
    
    return ans
 
for _ in range(t):
    print(solve())
 
Ae xài Python codeforces hạn chế xài set nhé, xài list thôi chấp nhận value bị trùng cũng được
Code của mình bị nó hack TLE, nếu đoạn prices = sorted(list(a + b)) thì pass

Python:
from bisect import bisect_left, bisect_right
 
 
t = int(input())
 
def solve():
    N, K = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    a = sorted(a)
    b = sorted(b)
    prices = sorted(set(a + b))
    ans = 0
    for price in prices:
        totalBought = N - bisect_left(b, price)
        boughtWithPossitiveReviews = N - bisect_left(a, price)
        if totalBought - boughtWithPossitiveReviews <= K:
            ans = max(ans, price* totalBought)
 
    return ans
 
for _ in range(t):
    print(solve())


Mã:
    a = sorted(a)
    b = sorted(b)
    prices = sorted(set(a + b))

Thím dùng nhiều hàm built in lồng nhau thế này nhìn hơi rợn, cảm giác không biết bên trong nó làm có tối ưu không.
Nghe thím nói bị hack mình cũng không bất ngờ lắm. :pudency:
Tiện tay thì code nhanh đoạn merge 2 list thôi.
 
Mã:
    a = sorted(a)
    b = sorted(b)
    prices = sorted(set(a + b))

Thím dùng nhiều hàm built in lồng nhau thế này nhìn hơi rợn, cảm giác không biết bên trong nó làm có tối ưu không.
Nghe thím nói bị hack mình cũng không bất ngờ lắm. :pudency:
Tiện tay thì code nhanh đoạn merge 2 list thôi.
Mình bị hack do dùng set(a + b) rồi brute force, dùng list(a + b) thì ok, cái đoạn code trên có cả sorted nữa nhưng mà dùng set cũng TLE sml rồi.
À có lần mình dùng defaultdict(int) lưu key là number cũng TLE sml, mà convert key qua string thì lại pass mượt mà thế mới ảo. Mình coi tụi nó submit bằng python cũng thấy tụi nó cast qua string rồi mới cho vô dict
 

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