# THTB - TP Đà Nẵng 2021 ## Bài 1 - 2 video đếm phân phối - Dùng `map` C++ - Dùng `dict`, `defaultdict`, `Counter` Python ## Bài 2 Gọi $s(x)$ là hàm tính tổng các ước của số $x$ Số giàu có $F(n)$ định nghĩa là $F(n) = \argmax_i(s(i))$. Tức là $F(n) = i$ với $i$ là giá trị từ $1$ tới $n$ sao cho $s(i)$ lớn nhất có thể ### Tính tổng ước? - Duyệt for tới căn bậc hai của $n$ - Dùng sàng nguyên tố Mảng sàng bình thường: - Mảng `is_prime[N]`. `is_prime[i] = true` nếu $i$ là số nguyên tố ngược lại, $i$ là hợp số. Mảng sàng cải tiến: - Đếm số lượng ước của mỗi số từ 1 tới $10^6$ - Tính tổng các ước của mỗi số từ 1 tới $10^6$ - *Tính toán liên quan ước chung, GCD từ 1 tới $10^6$* - Lưu `s[i]` là tổng các ước của $i$ ``` for (i từ 1 tới V_MAX) { for (tất cả bội j của i) { s[j] += i; } } ``` $O(V_{MAX} \log)$ ## Bài 3 $x + y + z = N$ $0 < x \le y \le z < N$ Tam giác: - $x + y > z$, $y + z > x$, $z + x > y$ BĐT tam giác - Vì đã sort nên: $x + y > z$ là đủ - Tam giác cân: - $x = y$ hoặc - $y = z$ - **Cạnh đáy lớn hơn cạnh bên.** - $x = y < z$ Đặt lại biến: Gọi $u$ là cạnh bên, $v$ là cạnh đáy. - $2u + v = N$ - $0 < u < v$ - $2u > v$ ### Sub 1: Chạy for $x,y,z$ ### Sub 2: Chạy for $u$ tính được $v$. Check điều kiện ### Sub 3: $v = N - 2u$ Điều kiện $u < v \Leftrightarrow u < N - 2u \Leftrightarrow u < \frac{N}{3}$ Điều kiện $2u > v \Leftrightarrow 2u > N-2u \Leftrightarrow u > \frac{N}{4}$ ### Sub 4: ## Bài 4 Nháp công thức Một cách xử lý tinh tế cho trường hợp $m$ chia hết: (caoductai orz) ![image](https://hackmd.io/_uploads/SJLVzynCkl.png) ## Bài 5 https://wiki.vnoi.info/vi/algo/data-structures/prefix-sum-and-difference-array