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

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: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình
  • 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

Bình luận

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