Hướng dẫn giải của Pokémon Trading Card Game
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ả: , , ,
Editorial for cgame: Pokémon Trading Card Game
Hiểu bài toán
Bài toán yêu cầu so sánh hai số nguyên dương a và b, đại diện cho chỉ số sức mạnh của bài Long và Linh. Do a và b luôn khác nhau, chỉ cần kiểm tra xem a có lớn hơn b hay không. Nếu a > b, Long thắng và in ra 1. Ngược lại, Linh thắng và in ra 0.
Các cách tiếp cận
Cách So sánh trực tiếp
#include <stdio.h>
int main() {
long long a, b;
scanf("%lld %lld", &a, &b);
if (a > b) {
printf("1");
} else {
printf("0");
}
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Đây là phương pháp trực quan nhất. Đọc hai số a và b, sử dụng câu lệnh if-else để so sánh. Nếu a > b, in 1; ngược lại in 0. Biến được khai báo kiểu long long để đảm bảo xử lý số lớn lên tới 10^9 an toàn.
Cách Sử dụng toán tử ba ngôi
#include <stdio.h>
int main() {
long long a, b;
scanf("%lld %lld", &a, &b);
printf("%lld", a > b ? 1 : 0);
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Tối ưu hóa mã nguồn bằng cách sử dụng toán tử ba ngôi (conditional operator) để rút gọn cấu trúc điều khiển, giúp code ngắn gọn hơn nhưng logic vẫn giữ nguyên.
Cách Phép toán logic
#include <stdio.h>
int main() {
long long a, b;
scanf("%lld %lld", &a, &b);
printf("%d", a > b);
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Tận dụng tính chất của boolean trong C: biểu thức a > b trả về 1 nếu đúng và 0 nếu sai, khớp hoàn toàn với yêu cầu đầu ra mà không cần if-else hay toán tử ba ngôi.
Phân tích độ phức tạp
| Cách tiếp cận | Time | Space | Tên |
|---|---|---|---|
| 1 | O(1) | O(1) | So sánh trực tiếp |
| 2 | O(1) | O(1) | Sử dụng toán tử ba ngôi |
| 3 | O(1) | O(1) | Phép toán logic |
Bài học kinh nghiệm
- Vì a và b luôn khác nhau (a != b), chỉ cần kiểm tra a > b là đủ, không cần xử lý trường hợp a == b.
- Sử dụng kiểu dữ liệu long long thay vì int để tránh tràn số với giá trị lên tới 10^9.
Lỗi thường gặp
- Sử dụng kiểu int để lưu a và b có thể gây lỗi tràn số integer overflow.
- Quên kiểm tra điều kiện nhập liệu (input format) dẫn đến lỗi runtime.
Bình luận