[Python_Training] Bài toán cấp phát mảng động

View as PDF



Problem types
Allowed languages
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
Points: 200 Time limit: 2.0s Memory limit: 256M Input: stdin Output: stdout
  • Cho một mảng ban đầu rỗng và có sức chứa tối đa là \(C\).

  • Cho \(N\) phần tử có giá trị bằng nhau.

  • Tiếp theo, ta lặp lại quá trình dưới đây cho đến khi \(N\) phần tử được đưa hết vào mảng thì dừng:

  • Nếu mảng chưa bị tràn, thêm vào mảng một phần tử, việc này tốn \(1\)VND (Việt Nam Đồng)

  • Nếu mảng bị tràn, thay mảng cũ bằng mảng mới có sức chứa gấp đôi mảng cũ, việc này không tốn chi phí

  • Sao chép từng phần tử của mảng cũ sang mảng mới, mỗi phần tử tốn \(1\) VND

Để hiểu rõ hơn quá trình trên, ta có thể xem ví dụ dưới đây:

  • Giả sử ta có \(C=1\)\(N=3\), khi đó quá trình sẽ diễn ra như sau:
Hành động Sức chứa Số lượng phần tử hiện tại Chi phí
Bắt đầu C = 1 0 0
Thêm C = 1 1 1
Thêm Tràn mảng
Đổi mảng C = 2 0 0
Sao chép C = 2 1 1
Thêm C = 2 2 1
Thêm Tràn mảng
Đổi mảng C = 4 0 0
Sao chép C = 4 2 2
Thêm C = 4 3 1

Vậy tổng chi phí để đưa \(N\) phần tử vào mảng là \(1+1+1+2+1=6\) VND

Yêu cầu: Cho hai số \(C\)\(N\). In ra tổng chi phí để đưa \(N\) phần tử vào mảng.

Input

  • Một dòng duy nhất chứa hai số nguyên \(C,N(1\le C\le 1000,0\le N\le 5.10^8)\)

Output

  • In ra kết quả cần tìm

Example

Test 1

Input
1 3
Output
6

Comments

There are no comments at the moment.