Hướng dẫn giải của Tôm và Jerry
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ả: , , ,
Hiểu bài toán
Bài toán yêu cầu xác định kết quả cho mỗi test case dựa trên tính chẵn/lẻ của số nguyên dương N cho trước. Cụ thể, nếu N là số chẵn, in ra 1; ngược lại (N là số lẻ), in ra 0. Input bao gồm số lượng test case T, sau đó là T số nguyên N cho mỗi test case.
Các cách tiếp cận
Cách Kiểm tra chẵn lẻ trực tiếp
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("tomjerry.inp", "r", stdin);
freopen("tomjerry.out", "w", stdout);
int t; cin >> t;
for(int i = 0; i < t; i++){
int a; cin >> a;
if(a % 2 == 0) cout << 1 << endl;
else cout << 0 << endl;
}
}
- Time Complexity: O(T)
- Space Complexity: O(1)
Đây là cách tiếp cận đơn giản nhất. Với mỗi test case, ta đọc số N và sử dụng phép chia lấy dư (%) với 2. Nếu N % 2 == 0 thì N chẵn, in ra 1. Ngược lại in ra 0. Cách này trực quan, dễ hiểu và hiệu quả về mặt thời gian chạy.
Cách Tối ưu hóa nhập xuất
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
freopen("tomjerry.inp", "r", stdin);
freopen("tomjerry.out", "w", stdout);
int t; cin >> t;
while(t--) {
int n; cin >> n;
if(n % 2 == 0) cout << 1 << "\n";
else cout << 0 << "\n";
}
return 0;
}
- Time Complexity: O(T)
- Space Complexity: O(1)
Phương pháp này có logic tương tự cách 1 nhưng tối ưu hóa tốc độ nhập xuất bằng cách sử dụng ios_base::sync_with_stdio(0); cin.tie(0); và cout.tie(0);. Điều này ngắt kết nối giữa C++ streams và C streams, giúp nhập xuất nhanh hơn đáng kể, đặc biệt quan trọng trong các bài toán có lượng dữ liệu vào ra lớn. Dấu ngoặc kép kép "\n" cũng nhanh hơn endl vì không ép buộc flush bộ đệm.
Phân tích độ phức tạp
| Cách tiếp cận | Time | Space | Tên |
|---|---|---|---|
| 1 | O(T) | O(1) | Kiểm tra chẵn lẻ trực tiếp |
| 2 | O(T) | O(1) | Tối ưu hóa nhập xuất |
Bài học kinh nghiệm
- Bài toán chỉ đơn giản là kiểm tra bit cuối cùng của số nguyên (hoặc phép chia lấy dư cho 2).
- Kết quả đầu ra cố định: 1 nếu chẵn, 0 nếu lẻ.
- Việc tối ưu hóa nhập xuất là cần thiết trong lập trình thi đấu để tránh TLE (Time Limit Exceeded) ở các bài toán có input lớn.
Lỗi thường gặp
- Quên không sử dụng
freopenđể đọc/ghi file theo yêu cầu của đề bài. - Sử dụng
endlquá nhiều có thể làm chậm chương trình so với"\n". - Lỗi chính tả trong tên biến hoặc cú pháp cơ bản.
Bình luận