Skip to content

DTQG #2 Editorial

16 Nov 2023

Bài 1

Giả sử dãy có phần tử bằng . Ta luôn chọn nó đầu tiên vì luôn khiến đáp án tốt hơn. Nếu dãy có phần tử min là , phần tử này sẽ đóng góp vào đáp án . Ta coi như là giảm dãy đi đơn vị, lúc này xuất hiện thêm các phần tử , ta chỉ việc xoá chúng đi và làm lại bước trên.

Đáp án cũng được cộng với (không xoá luôn mà có thể để sau này mới xoá , chú ý: ta coi là dãy đang giảm đi đơn vị).

Tóm tắt các bước:

  • Tìm phần tử nhỏ nhất là .
  • Cộng vào đáp án cuối cùng với là số giá trị còn lại.
  • Cộng vào đáp án cuối cùng .
  • Giảm cả dãy đi , xoá các phần tử .

Có thể cài đặt bằng Segment tree, không cần phải thực hiện thao tác xoá mà chỉ cần giảm trên Segtree.

Bài 2

Đáp án luôn vì một số chỉ có tối đa ước nguyên tố khác nhau. Ta tính mảng là số cách chọn phần tử sao cho có .

Gọi số lượng số chia hết cho . Số cách chọn phần tử từ phần tử là . Sau khi khởi tạo , ta chỉ cần trừ hết đi , , ...

Bài 3

Ta chặt nhị phân đáp án, giả sử xét giá trị , ta cần xem có tồn tại cách chọn sao cho số lượng phần tử hay không. Ta sẽ coi những phần tử , những phần tử . Ta nghĩ đến để chọn được tổng .

Gọi là tổng nếu đã xét phần tử đầu và đã chọn tối đa đoạn. Công thức:

.

Nếu trong các phần tử , , ..., , ta có đoạn với lớn nhất thì ta sẽ ưu tiên chọn đoạn này để mở rộng ra nhiều nhất, tổng được mở rộng ra đúng bằng với từ đến . Do đó với lớn nhất sao cho là mảng tổng tiền tố.

Cách làm trên là đúng vì mỗi lần ta chỉ thêm các phần tử chưa được xét, dù một phần tử bị nhiều đoạn đè lên.