Hướng dẫn cho Chia kẹo 3
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Tóm tắt đề bài
Mẹ có tổng cộng \(2024\) cái kẹo, chia cho Dino và Daisy sao cho:
- Cả hai đều nhận được kẹo (thường hiểu là số kẹo nguyên không âm, và “đều có kẹo” \(\Rightarrow\) mỗi người \(\ge 1\)).
- Daisy nhiều hơn Dino đúng \(K\) cái.
Hãy in ra số kẹo của Dino; nếu không thể chia thỏa mãn thì in ra 0.
Phân tích
Gọi số kẹo của Dino là \(x\), của Daisy là \(y\). Khi đó:
- Tổng: \(x + y = 2024\)
- Hiệu: \(y - x = K\)
Cộng hai phương trình:
\[2y = 2024 + K\]
Trừ hai phương trình:
\[2x = 2024 - K\]
Suy ra:
\[x = \frac{2024 - K}{2}, \quad y = \frac{2024 + K}{2}\]
Điều kiện để tồn tại nghiệm nguyên và hợp lệ:
- \(2024 - K \ge 0 \Rightarrow K \le 2024\) (để \(x \ge 0\); nếu yêu cầu “đều có kẹo” theo nghĩa \(\ge 1\) thì cần \(K \le 2022\)).
- \(2024 - K\) phải chẵn \(\Leftrightarrow K\) phải chẵn (vì \(2024\) chẵn).
Nhận xét về code AC đã cho:
- Code kiểm tra \(K\) chẵn.
- Sau đó kiểm tra \(K < 1012\) và in ra \(1012 - \frac{K}{2}\), tức là:
\[1012 - \frac{K}{2} = \frac{2024}{2} - \frac{K}{2} = \frac{2024 - K}{2} = x\]
- Nếu không thỏa, in
0.
Điểm cần chú ý: điều kiện đúng theo công thức tổng quát là \(K \le 2024\) (và \(K\) chẵn), trong khi code dùng ngưỡng 1012 (tức \(K < 1012\)). Editorial dưới đây trình bày điều kiện chuẩn theo bài toán.
Hướng giải quyết
Nhận xét
- Bài toán quy về giải hệ 2 phương trình bậc nhất với 2 ẩn.
- Nghiệm xác định duy nhất nếu tồn tại, nên chỉ cần kiểm tra tính hợp lệ.
Thuật toán
- Đọc \(K\).
- Nếu \(K\) lẻ, in
0(vì \(x, y\) không thể là số nguyên). - Tính \(x = \dfrac{2024 - K}{2}\).
- Nếu \(x < 0\) (tức \(K > 2024\)), in
0. - (Nếu đề bắt buộc mỗi người ít nhất 1 cái kẹo) kiểm tra thêm \(x \ge 1\) và \(y \ge 1\) tương đương \(1 \le x \le 2023\).
- Ngược lại, in \(x\).
Độ phức tạp
- Thời gian: \(O(1)\)
- Bộ nhớ: \(O(1)\)
Code tham khảo
Python
# Chia kẹo 3 - Reference solution (Python 3)
K = int(input().strip())
# K phải chẵn để (2024 - K)/2 là số nguyên
if K % 2 != 0:
print(0)
else:
x = (2024 - K) // 2 # số kẹo của Dino
y = (2024 + K) // 2 # số kẹo của Daisy (không nhất thiết cần in)
# Điều kiện tồn tại nghiệm không âm
if x < 0:
print(0)
else:
# Nếu bài yêu cầu "đều có kẹo" theo nghĩa mỗi người >= 1,
# hãy bật điều kiện dưới đây:
# if x == 0 or y == 0:
# print(0)
# else:
# print(x)
print(x)
Bình luận (1)