Hướng dẫn giải của Pokémon Trading Card Game


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.

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ập

Tác giả: Hiếu Nguyễn, no_xname, SaladRatNgon, dzvl

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

Please read the guidelines before commenting.


Không có bình luận tại thời điểm này.