Editorial for Trồng Cây


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

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é !



Comments

There are no comments at the moment.