# THTB Vòng Sơ loại Toàn quốc 2025 - Lần 1
## Câu hỏi khó?
> Ngôn ngữ cú pháp giống Python mà nhanh hơn?
> Modular!
- Vì sao dùng `sys.stdin / stdout` nhanh hơn `input / print`?
- Buffer
- (tương tự) Vì sao dùng `scanf / printf` nhanh hơn `cin / cout`? (Hay vì sao phải thêm câu lệnh `ios::sync_with_stdio(0); cin.tie(0);`?)
## Bài 3
### Subtask 1
- Khai báo 4 biến a,b,c,d
- Dùng vòng lặp while, biến đổi tới khi a = b = c = d = 0
- Dùng biến đếm `cnt` lưu lại số lần biến đổi.
- In `cnt`
```cpp
#include <bits/stdc++.h>
using namespace std;
// strongly typed
// weakly typed
int main() {
int a,b,c,d;
cin >> a >> b >> c >> d;
// int(input())
int cnt = 0;
while (max({a,b,c,d}) > 0) {
++cnt;
int aa = abs(a-b);
int bb = abs(b-c);
int cc = abs(c-d);
int dd = abs(d-a);
a = aa;
b = bb;
c = cc;
d = dd;
}
cout << cnt;
}
```
### Subtask 2
Đệ quy quay lui (Cày Trâu)
Cấu trúc của Đệ quy quay lui
Bản chất của lời gọi hàm: Tạo thành một cây rất nhiều nhánh (mỗi nút - mỗi hàm) gọi tới 3 hàm khác --> số lượng phép tính là Lũy thừa !!!
https://viblo.asia/p/thuat-toan-quay-lui-backtracking-bJzKmLbD59N
```
backtrack(trạng thái) {
Nếu (trạng thái là Kết thúc) return ;
Nếu (trạng thái không thể cho ra kết quả tốt hơn) return ;
for (các lựa chọn có thể cho trạng thái hiện tại) {
trạng thái mới = (trạng thái hiện tại) + (lựa chọn);
backtrack(trạng thái mới);
}
}
```
Code mẫu của anh Quý:

### Subtask 3
Với bốn số liên tiếp: Spam biến đổi 8 lần liên tục sẽ biến thành 4 số 0
==> ĐÁP ÁN CHO $n = 8$ không thể vượt quá 16
`1 2 3 4 || 5 6 7 8`
Cải tiến so với subtask 2: Chỉ cần gán ans ban đầu `ans = 16` !!!!!
### Cách đọc vào Input với số lần không biết trước
Đề bài: Nhập vào $n$ số trên $n$ dòng (NHƯNG KHÔNG BIẾT $n = ?$)
Giải pháp: từ khóa tìm kiếm "Đọc vào với số lần không biết trước - Python / C++"
Lưu ý: Để test trên máy, sau khi nhập xong, Nhấn `Ctrl + Z` (Thonny) hoặc `Ctrl + D` (máy Windows, C++, ...) để tạo ra ký tự EOF (End Of File) để kết thúc chương trình
https://chatgpt.com/share/68039bae-291c-800f-a3ca-3c4752e36c61
Code C++:
```
while (cin >> biến) {
}
hoặc
while (getline(cin, line)) {
}
```
Python: như trên
```python=
ds = []
while True:
đọc vào số a
ds.append(a)
n = len(ds)
```
```cpp=
vector<int> a;
while (cin >> ai) {
a.push_back(ai);
}
```
```cpp=
const int N = 1e5 + 50;
int a[];
int main() {
int n = 0, ai;
while (cin >> ai) {
a[++n] = ai;
}
}
```
## Bài 1
Tính chất:
> Số có tổng chữ số chia hết cho 9 là số chia hết cho 9
> (Tổng chữ số của X) = (Số X) (mod 9)
(Đồng dư thức)
Bài toán: Tính tổng các số chia hết 9
Gọi $9k$ là số lớn
## Bài 2
- Dùng hai con trỏ cho biến kết quả cuối cùng
-