Có ý tưởng giống bài Rate 2000, 1574D The Strongest Buil, div 2

Nguyễn Hoàng Sơn 2021-10-02 2:36:15

Bài này ban đầu mình AC rồi, nhưng mình ngáo quá đi dùng hash để nén vector trong khi vector không lớn lắm. Thành ra sau một ngày thế méo nào CF lại đi thêm một test giết hash của mình thành ra tạch rate không thì được rank 500, rate +147 rồi. Cay vãy

Tổng cộng 1 trả lời

Trùm CUỐI

Bài này đâu có phức tạp thế.

Ý tưởng là thế này:

Ta sắp xếp dãy a_i theo thứ tự không giảm, khi đó a_i+b_j sẽ luôn đứng sau a_{i+1}+b_i trong dãy tổng đã sắp xếp. Do đó, khi chọ k phần tử của dãy tổng, nếu a_i+b_j chưa được chọn thì chắc chắn chưa đến lượt a_{i+1}+b_j .

Do đó, ta có thuật toán: Dùng một hàng đợi ưu tiên (min):

  • Ban đầu đẩy vào n phần tử a_1+b_1,a_1+b_2,...,a_1+b_n
  • Lặp lại cho đến khi lấy đủ k phần tử: lấy phần tử nhỏ nhất từ hàng đợi, giả sử phần tử lấy ra là a_i+b_j thì sẽ đẩy vào hàng đợi a_{i+1}+b_j , tất nhiên với điều kiện i < n .