Mô tả bài toán
HP chia 4 hạng: A (4n+1), B (4n+3), C (4n+2), D (4n). Thứ tự: A>B>C>D. Có thể tăng HP 0,1,2. Tìm lượng tăng để đạt hạng cao nhất.
Ví dụ
n=98 (4*24+2 → hạng C). Tăng 1 → 99 (4*24+3 → hạng B). Tăng 2 → 100 (4*25 → hạng D). Chọn tăng 1 đạt hạng B. Output: "1 B".
Thuật toán
Xét n%4: - 0 (hạng D): tăng 1 → hạng A (4n+1) → "1 A". - 1 (hạng A): tăng 0 → "0 A". - 2 (hạng C): tăng 1 → hạng B → "1 B". - 3 (hạng B): tăng 0 → "0 B" (hoặc tăng 2 về hạng A? 4n+3+2=4n+5=4(n+1)+1 → hạng A, nhưng tăng 2 được phép. Tuy nhiên code chỉ xét n%4==2 thì "1 B", else |n%4-1| và 'A'. Cần kiểm tra: n%4=3 → |3-1|=2 → "2 A". Đúng, tăng 2 lên hạng A tốt hơn hạng B).
Code C++
#include <bits/stdc++.h>
using namespace std;
void solve(int n) {
if (n % 4 == 2)
cout << "1 B";
else
cout << abs(n % 4 - 1) << " A";
}
int main() {
int n = 98;
solve(n);
return 0;
}
Đầu vào / Đầu ra
Input: 98
Output: 1 B