[Python_Training] Chi phí thấp nhất

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
C#, C++, Clang, Clang++, Cobol, D, Groovy, Haskell, Java, JS, Kotlin, Lua, Node JS, ObjectiveC, OCaml, Output, PHP, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 200 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Henry\(N\) số nguyên \(a_1,a_2,...,a_N\). Mục tiêu của anh ta là làm cho \(N\) số nguyên này bằng nhau thông qua phép biến đổi sau:

  • Chọn một số nguyên \(x\) bất kì từ \(N\) số trên và biến số đó thành số nguyên \(y\) với chi phí là \((x-y)^2\) VND (Việt Nam Đồng). (Biết rằng, mỗi số chỉ được chọn không quá \(1\) lần)

Yêu cầu: Tìm tổng chi phí thấp nhất để Henry có thể thực hiện được mục tiêu trên.

Input

  • Dòng thứ nhất chứa số nguyên \(N(1\le N\le 100)\)
  • Dòng thứ hai chứa \(N\) số nguyên \(a_1,a_2,...,a_N(-100\le a_i\le 100)\)

Output

  • In ra tổng chi phí thấp nhất cần tìm.

Example

Test 1

Input
3
1 1 3
Output
3
Note

Giải thích: Anh ấy sẽ đưa tất cả các số trên về giá trị \(2\), do đó tổng chi phí là: \((1-2)^2+(1-2)^2+(3-2)^2=3\)


Bình luận


  • 0
    huyhau6a2    9:34 a.m. 27 Tháng 3, 2022 chỉnh sửa 2

    \(\color{red}{\text{Spoiler Alert}_{{}_{{}^{{}^{v2.0}}}}}\)

    \(\color{red}{\text{Khuyến khích bạn đọc trước khi đọc phần lời giải xin hãy thử code ra thuật của mình dù nó có sai hay đúng}}\)

    \(\color{red}{\text{Sau đó từ phần bài giải và thuật toán trước đó mà đối chiếu, rút nhận xét với thuật của mình và thu được bài học (không lãng phí thời gian đâu).}}\)



    \(\color{orange}{\text{Hướng dẫn 1}}\)

    Hướng dẫn này sẽ áp dụng vào bài chi phí thấp nhất 1

    \(|a[i]|<=100\) cho nên các bạn có thể cày trâu từng số để tìm được cách tối ưu

    Độ khó:

    • Gọi \(max(a)\) là số lớn nhất trong dãy, \(min(a)\) là số nhỏ nhất trong dãy:

    • Độ khó tổng quát là: \(O((max(a)-min(a)+1)*n)\)


    \(\color{orange}{\text{Hướng dẫn 2}}\)

    Cách làm trong hướng dẫn 1 chỉ là một cách cày trâu, vì thế khi xét các giá trị lớn như trong bài chi phí thấp nhất 2 thì sẽ dễ bị \(TLE\)

    Mình xin hướng dẫn chi tiết cho bài chi phí thấp nhất 2 như sau:

    Đầu tiên để giải quyết được vấn đề các bạn phải nhận xét được rằng: gọi \(F(x)\) là chi phí để đưa các số về \(x\), thì khi xét \(x\) tăng dần, nó sẽ tạo thành một đồ thị có: Phần đầu giảm chặt, đạt đến giá trị nhỏ nhất, sau đó tăng chặt. (convex)

    Nhờ vào đặc tính đó, ta có thể áp dụng chặt tam phân cho bài toán trên. Các bạn có thể xem tại đây

    Vậy bài toán sẽ quy về tìm \(F(x)\) nhỏ nhất

    Cách làm cụ thể các bạn có thể tham khảo thêm về lý thuyết chặt tam phân nhé! Chúc các bạn accepted!



    • -7
      trantrungkien2008    9:23 p.m. 22 Tháng 9, 2020

      Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.

      1 phản hồi