Hướng dẫn giải của Tích Lũy Đầu Tư Định Kỳ
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lời giải này đang bị ẩn cho đến khi bạn chọn mở ra.
Chúng tôi khuyên bạn nên tự thử giải bài trước. Việc mở lời giải có thể làm lộ mất ý tưởng chính trước khi bạn có cơ hội tự giải.
Bạn phải đăng nhập để mở lời giải này.
Đăng nhậpTác giả:
Phân tích
Ta mô phỏng chính xác quy trình được nêu trong đề bài.
Nếu ~A~ là số tiền hiện có ở đầu tháng, thì cuối tháng đó:
- Tài khoản tăng trưởng thành ~\left\lfloor A \times \frac{10000 + r}{10000} \right\rfloor~
- Sau đó cộng thêm khoản nộp cố định ~C~
Vì tổng ~n~ của mọi test không vượt quá ~2 \cdot 10^5~, ta chỉ cần mô phỏng trực tiếp từng tháng.
Thuật toán
Với mỗi test:
- Gán ~A = P~
- Lặp ~n~ lần: ~A = \left\lfloor A \times \frac{10000 + r}{10000} \right\rfloor + C~
- In ~A~
Độ phức tạp
- Thời gian: ~O\left(\sum n\right)~
- Bộ nhớ: ~O(1)~
Code mẫu
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) {
long long P, C, r, n;
cin >> P >> C >> r >> n;
long long A = P;
for (long long i = 0; i < n; ++i) {
__int128 grown = (__int128)A * (10000 + r) / 10000;
A = (long long)grown + C;
}
cout << A << '\n';
}
return 0;
}
Bình luận