# 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ý: ![image](https://hackmd.io/_uploads/BkadJNWklx.png) ### 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 -