Hướng dẫn cho Trồng Cây
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Mình xin chia sẻ lời giải bài này như sau:
Gọi \(q_i\) là số thứ tự được đánh của cây \(c_i\). Khi đó ta có:
\(\underbrace{1}_{1\text{ lần }}\underbrace{22}_{2\text{ lần }}...q_i\)
Khi đó xảy ra hai trường hợp sau:
TH1: Nếu \(\exists k\in \mathbb{N}^{*}\) thỏa mãn \(\frac{k(k+1)}{2}=c_i\). Khi đó \(q_i=k\)
TH2: Nếu \(\not\exists k\in \mathbb{N}^{*}\) thỏa mãn \(\frac{k(k+1)}{2}=c_i\). Gọi \(k'(k'\in \mathbb{N}^{*})\) là số lớn nhất thỏa mãn: \(\frac{k'(k'+1)}{2}<c_i\). Khi đó \(q_i=k'+1\).
Công việc còn lại là code, và chúng ta có thể gộp hai trường hợp trên thành \(1\) như sau:
Từ công thức: \(\frac{k(k+1)}{2}=c_i\implies 4k^2+4k+1 = 8c_i+1 \iff (2k+1)^2 = 8c_i+1 \implies k=\lfloor \frac{\sqrt{8c_i+1}-1}{2}\rfloor\) .
Đến đây, ta kiểm tra xem:
- Nếu \(\frac{k * (k+1)}{2}=c_i\) thì \(q_i=k\) ngược lại \(q_i=k+1\).
Vậy ta đã giải quyết xong bài toán.
Chú ý: Ở bài toán đã sử dụng công thức toán quen thuộc đó là: \(1+2+3+...+n=\frac{n(n+1)}{2}\).
Các bạn có thể tham khảo code mình tại \(\href{https://ideone.com/3LoYDF}{đây}\)
P/s: Nếu có gì thắc mắc, các bạn cứ thoải mái comment nhé !
Bình luận