Tháp (THT TP 2019)

Xem PDF

Điểm: 200 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Có một tháp các ô vuông bằng nhau có hình dạng giống một tam giác cân. Các hàng tính từ trên xuống dưới có số ô vuông lần lượt là \(1; 3; 5; 7; …\). Một tháp ô vuông có \(n\) hàng gọi là tháp ô vuông bậc \(n\) (\(n\) là số tự nhiên).

Ví dụ ở hình vẽ sau ta có một tháp ô vuông bậc \(3\):

Yêu cầu: Cho trước một tháp ô vuông bậc \(n\). Hãy tính xem trong tháp ô vuông này có tất cả mấy hình vuông tạo thành từ các ô vuông đó.

Input

  • Chứa một số \(n\) (\(n \le 5 \times 10^5\)).

Output

  • Ghi ra số nguyên \(m\) là số các hình vuông cần tìm.

Example

Test 1

Input
3
Output
11

Bình luận


  • 9
    letangphuquy    10:05 p.m. 5 Tháng 1, 2022

    Mình xin đóng góp một cách giải :

    Ta sẽ duyệt độ dài cạnh hình vuông, gọi là \(x\), lúc này cần đếm số hình vuông con cạnh \(x\) có trong tháp.

    Xét ô góc trái trên của hình vuông con này. Dễ thấy : số hình vuông con = số lượng vị trí có thể cho ô góc trái trên

    Hàng \(i\) chứa được ô góc trái trên khi và chỉ khi : \(2i-1 \ge x\)\(i+x-1 \le n\). Chuyển vế đổi dấu có được \(i\) thuộc đoạn \([(x+1)/2, n-x+1]\).

    Trên hàng \(i\), có \(2i-1 - x+1 = 2i-x\) ô trái trên. Suy ra cần tính \(sigma(2i-x) = sigma(2i) - sigma(x)\) . Ta được công thức O(1).

    Tham khảo code mình ở đây : link


    • 6
      jumptozero    8:46 a.m. 14 Tháng 7, 2020 chỉnh sửa 3
      • Mình xin chia sẻ lời giải bài toán này như sau:

      • Gọi \(f(m)\) là số hình vuông cần tìm, khi đó ta có: \(f(m)=f(m-1)+\sum\limits_{i=0}^{\left \lfloor{\frac{2m-1}{3}}\right \rfloor}2(m-i)-1-i\) với \(f(1)=1\)\(m\ge 2\)

      • Trong đó \(2(m-i)-1-i\) chính là số hình vuông có cạnh là \(i+1\).

      • Từ công thức trên ta có: \(f(m)=f(m-1)+2m*(k(m)+1)-\frac{3k(m)(k(m)+1)}{2}-(k(m)+1)\) với \(k(m)=\left\lfloor{\frac{2m-1}{3}}\right\rfloor,f(1)=1,m\ge 2\).

      • Từ đây ta dễ dàng duyệt một for để xây dựng mảng \(f(m)\) với \(1\le m\le 5.10^5\)

      • Như vậy bài toán đã được chứng minh.

      • Các bạn có thể tham khảo code của mình tại \(\href{https://ideone.com/cMOxeY}{đây}\)

      1 phản hồi