Hướng dẫn cho Trồng Cây


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn nà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: jumptozero

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

Không có bình luận nào.