# Đề THTB Đà Nẵng 2022
## Bài 2
### Subtask 1: $x \le 10^6$
Ta có thể thử từng giá trị của $y$ bằng vòng lặp `for`. Với mỗi $y$, có được $x+y$ và lấy tổng này kiểm tra xem có "siêu đối xứng" không?
Thuật toán:
1. Chạy for y (để thử)
2. Tính tổng
3. Kiểm tra tổng có phải "siêu đối xứng" không?
Mã giả:
```
for (y từ 1 tới 10^7) {
biết x, biết y
tổng = x+y
kiem_tra(tổng)
}
```
Cách kiểm tra
1. Chuyển thành String
2. Chia 10, chia dư 10, ....
Tổng $x+y$ sẽ luôn nhỏ hơn $1111111$ (bảy cs) nên sẽ không bị TLE. Viết hàm kiểm tra số siêu đối xứng.
### Subtask 3: $x \le 10^{16}$
123456
...
123457
210987
...
222222
Thuật toán:
1. Chạy for tất cả những số siêu đối xứng (gọi là $z$), số nào có thể là tổng
a. Số SĐX là một chữ số lặp lại nhiều lần
b. Chọn độ dài, chọn chữ số (bằng vòng lặp for)
3. Check $(z > x) \Rightarrow y = z - x$
```
for (độ dài từ 1 tới 17) {
for (chữ số từ 1 tới 9) {
Tạo ra z là tổng? (for)
z > x
y = z - x
}
}
```
### Subtask 4?: $x \le 10^{N}$
`135, 222, 867`
```
1236748712367581236
<
11111111111111111111
```
```
1236748712367581236
<
2222222222222222222
```
```
105
<
111
```
```
33345
<
111
```
```
987
990
```
## Bài 3
### Subtask 1.
Có những số $a \le x$ nào mà $a$ là SNT và $b = x-a$ cũng là SNT?
Không biết --> Chạy for tất cả giá trị có thể của $a$
1. Chạy for a
2. b = x - a
3. Kiểm tra a là SNT?
4. Kiểm tra b là SNT?
Hàm kiểm tra SNT: Xem Lesson "Số học"
Nếu hàm kiểm tra $n$ là SNT chạy trong ĐPT $O(n)$
### Subtask 2.
Nếu hàm kiểm tra $n$ là SNT chạy trong ĐPT $O(\sqrt{n})$
### Subtask 3
Tối ưu kiểm tra SNT bằng kĩ thuật "Sàng nguyên tố". Sàng Eratosthenes
## Bài 4
Subtask 1: Đệ quy quay lui (backtracking)
Subtask 2: Quy hoạch động cơ bản + Big Num
## Bài 5:
Bài toán đếm thứ tự từ điển.
Lần lượt xây dựng các chữ số $\overline{p****}$. Với prefix là $p$, có bao nhiêu số nhận $p$ làm prefix?
Lần lượt điền các chữ số từ $0,1,2,\dots,9$ vào vị trí dấu * kế tiếp để mở rộng prefix. Mở rộng tới khi đã tìm thấy số thứ $N$
QHĐ chữ số? Không cần thiết vì chỉ là $5^k$