## LƯU Ý CHUNG
Một số lưu ý đã có ở trong template code:
```cpp
/* stuff you should look for
* int overflow, array bounds
* special cases (n=1?)
* do smth instead of nothing and stay organised
* WRITE STUFF DOWN
* DON'T GET STUCK ON ONE APPROACH
*/
```
- int overflow: chú ý đến giới hạn bài toán, cẩn thận tràn số. Nhắc lại:
int: $-10^9$ cho đến $10^9$
long long: $-10^{18}$ cho đến $10^{18}$
- array bounds: chú ý đến giới hạn của mảng.
VD: Nếu mảng đánh chỉ số từ 0 đến n-1 mà gọi chỉ số n hoặc -1, -2 thì sẽ bị tràn mảng.
- special cases: chú ý đến trường hợp đặc biệt trong bài toán.
VD: Số nhỏ hơn 4 lớn hơn 1 đều là số nguyên tố.
- do smth instead of nothing: luôn luôn không được bỏ trống bài. Nếu không làm được có thể in ra test trên đề bài hoặc duyệt trâu. In ra test đề bài chỉ có thể đúng được 1 - 2 test còn duyệt trâu có thể lấy được 10% đến 50% điểm.
- stay organised: viết code gọn gàng để dễ debug.
- WRITE STUFF DOWN: phân tích các test đề bài, hướng làm ra nháp.
- DON'T GET STUCK ON ONE APPROACH: nếu bị bí, hãy nghĩ ra nhiều hướng làm khác.
### DUYỆT TRÂU
Template duyệt trâu:
```cpp
string x;
int k=4;
void duyet(int l){
if (l>k){
for (int i=0;i<x.length();i++){
if (x[i]=='1') {/*duyet*/}
else if (x[i]=='0') {/*duyet*/}
}
return;
}
for (char i='0';i<='1';i++){
x=x+i;
duyet(l+1);
x.pop_back();
}
}
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//nhap du lieu
duyet(1);
}
```
Ta sẽ tạo ra các xâu nhị phân (1000, 0010, 1101, …). Ở ví dụ trên, các xâu nhị phân sẽ có độ dài là 4.
Bài tập ví dụ: https://cses.fi/problemset/task/1623
Lời giải:
Ta sẽ tạo ra các xâu nhị phân có độ dài n tương ứng tất cả các trường hợp chọn táo:
Kí tự ‘1’ tức là ta chọn quả táo thứ i vào túi A
Kí tự ‘0’ tức là ta chọn quả táo thứ i vào túi B
Cuối cùng kiểm tra xem điều kiện đề bài có thỏa mãn không. Lấy kết quả tìm được chia 2 ra đáp án cần tìm.
Nếu muốn xem thêm duyệt trâu có thể xem video Buổi 11 - Lớp học cơ bản cho trẻ em.
### TEMPLATE CODE
```cpp
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
using namespace std;
#define MOD 1000000007
#define BASEH1 31
#define bit(n,i) (((n)>>(i))&(1))
#define valid(i,n) (i>=1&&i<=n)
typedef long long ll;
typedef long double ld;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
/* stuff you should look for
* int overflow, array bounds
* special cases (n=1?)
* do smth instead of nothing and stay organised
* WRITE STUFF DOWN
* DON'T GET STUCK ON ONE APPROACH
*/
```