少女祈祷中...

Đề bài

Cho mảng aa gồm nn phần tử nguyên dương và số nguyên dương kk. Đếm số subsequence của aa có tổng bằng kk.

Giới hạn: 1n,k,ai1051 \le n, k, a_i \le 10^5

Link bài: https://lqdoj.edu.vn/problem/23ts10dna4 Cần join link này trước: https://lqdoj.edu.vn/contest/23ts10dna

Lời giải

Lời giải mặc định độc giả đã biết các kiến thức cơ bản về hàm sinh.

Gọi fif_i là đáp án với k=ik = i, F(x)F(x) là hàm sinh của fif_i. Dễ thấy:

F(x)=(1+xa1)×(1+xa2)×(1+xan)F(x) = (1 + x^{a_1}) \times (1 + x^{a_2}) \times \dots (1 + x^{a_n})

Nếu nhân thẳng các đa thức trên bằng FFT, ta sẽ có độ phức tạp O(nklogn)O(nklogn), vốn còn chậm hơn thuật vét cạn bằng DP Knapsack (O(nk))(O(nk)).

Tuy nhiên, tới đây, ta có một cái trick khá hay, dựa trên nhận xét sau: ln(a×b)=ln(a)+ln(b)ln(a \times b) = ln(a) + ln(b)

Gọi: G(x)=ln(F(x))G(x) = ln(F(x)) =ln((1+xa1)×(1+xa2)×(1+xan))= ln((1 + x^{a_1}) \times (1 + x^{a_2}) \times \dots (1 + x^{a_n})) =ln(1+xa1)+ln(1+xa2)++ln(1+xan)= ln(1 + x^{a_1}) + ln(1 + x^{a_2}) + \dots + ln(1 + x^{a_n})

Vậy ta tính ln(1+xk)ln(1 + x^k) nhu nào? Với Taylor Series, ta có:

ln(1+xk)=n=1(1)n+1xnkn=xkx2k2+x3k3ln(1 + x^k) = \sum_{n = 1}^{\infty} (-1)^{n + 1} \frac{x^{nk}}{n} = x^k - \frac{x^{2k}}{2} + \frac{x^{3k}}{3} - \dots

Vậy ta có thể tính G(x)G(x) trong O(nlogn)O(nlogn) đơn giản chỉ là for qua các bội và cộng hệ số vào.

Sau đó, ta có thể tính được F(x)=eG(x)F(x) = e^{G(x)}.

Đáp án cuối cùng là [xk]F(x)[x^k]F(x), hay hệ số của xkx^k trong F(x)F(x).

Các bạn có thể xem implement tại đây

Một chút bàn luận

Bài này là một bài rất rất khó với đề ts10, hay thậm chí là đề VOI. Với bài này, trong bối cảnh là kỳ thi offline, không được dùng template và nộp 11 lần, với những người kỳ cựu nhất và biết cả sol thì việc cài đặt bài này là vô cùng khó.

Tuy nhiên, vét cạn bài này lại rất cơ bản và các bạn nên chắc chắn làm được O(nk)O(nk).

Chúc các bạn thành công trong việc full đề ts10 ĐN 2023.

Author: Võ Khắc Triệu (DeMen100ns) @ DeMen100ns's Blog

Permalink: https://demen100ns.github.io/blog/2026-07-12-ts10-da-nang-2023-bai-4/

Title: Lời giải Bài 4 đề thi TS10 2023-24 môn Tin học của Đà Nẵng

License: All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!