Tuyển sinh 🎓 Mình nhận đào tạo lập trình giải thuật thi đấu: thi vào lớp 10 chuyên tin · thi học sinh giỏi tin học cấp tỉnh/thành · thi vào đội tuyển quốc gia · Olympic tin học sinh viên / ICPC · phỏng vấn thuật toán. Bấm vào đây để xem thông tin khóa học → Xem khóa học
Thi thử miễn phí
🏆 Thi thử HSG Tin học tuần này trên ClueOJ
Mở công khai cho mọi người · đề do thầy Nguyễn Việt Nam Sơn biên soạn
Lịch thi, đề cũ & lời giải →

Bài 14: Tổng ôn series Nhập môn lập trình và đề thi thử 6 câu có lời giải chi tiết (C++ và Python)

Bài 14 – Tổng ôn và đề thi thử nhập môn
Series: Nhập môn lập trình thuật toán Độ khó: Dễ Bài 14 / Kiến thức nền tảng Tổng ôn, đề thi thử
// Nhập môn lập trình · Bài 14
Tổng ôn series nhập môn và đề thi thử 6 câu (có lời giải chi tiết C++ và Python)
Hệ thống lại toàn bộ 13 bài, quy trình giải một bài thi, checklist trước khi nộp và một đề thi thử 180 phút để em tự đánh giá mình đã sẵn sàng bước vào thuật toán hay chưa.

Lời mở đầu

Chúc mừng em đã đi tới bài cuối của series Nhập môn lập trình! Sau 13 bài, em đã có trong tay gần như đủ “đồ nghề” để giải các câu dễ và trung bình của một đề thi học sinh giỏi cấp huyện, cấp tỉnh hay đề thi vào lớp 10 chuyên Tin. Bài này không dạy kiến thức mới mà giúp em ghép các mảnh lại với nhau: một sơ đồ tổng kết, quy trình 6 bước khi làm một bài thi, và quan trọng nhất là một đề thi thử 6 câu trải đều các chủ đề đã học. Hãy làm thật nghiêm túc: bấm giờ 180 phút, không xem gợi ý, tự chấm bằng các ví dụ rồi mới so với lời giải.

Trong bài này bạn sẽ học: sơ đồ kiến thức 13 bài; quy trình 6 bước giải một bài thi; checklist trước khi nộp và đồng hồ thi thử; đề thi thử 6 câu (rẽ nhánh, vòng lặp, xâu, struct và sắp xếp, mảng cộng dồn, sàng nguyên tố) kèm gợi ý, lời giải C++/Python và khung chạy tay; cách tự tạo test để kiểm tra bài; và nên học gì tiếp theo.

Lộ trình bài viết, bấm vào từng phần để nhảy tới:

Phần 1Sơ đồ kiến thức của series

14 bài của series chia thành 4 nhóm. Mỗi nhóm dựa trên nhóm trước nó; nếu thấy hổng ở đâu, em hãy quay lại đúng bài đó (bấm vào thanh series phía trên để mở nhanh).

Nền tảngBÀI 1Lập trình là gìBÀI 2Nhập xuất, kiểu dữ liệuBÀI 3Rẽ nhánh if, switchBÀI 4Vòng lặp for, whileTổ chức dữ liệuBÀI 5Hàm, đệ quyBÀI 6Mảng 1 chiều, vectorBÀI 7Mảng 2 chiềuBÀI 8Xâu ký tựKỹ năng thiBÀI 9Độ phức tạp, fileBÀI 10Struct, sắp xếpBÀI 11STLKỹ thuật đầu tiênBÀI 12Số học, sàngBÀI 13Đánh dấu, cộng dồnBÀI 14Tổng ôn, thi thử

Nền tảng → Tổ chức dữ liệu → Kỹ năng thi → Các kỹ thuật thuật toán đầu tiên.

Dạng đề hay gặpKiến thức cầnBài
Tính toán theo công thức, bậc thang, phân loạiNhập xuất, kiểu số, if – else2, 3
Đếm, tính tổng, xử lý chữ sốVòng lặp, % và /4, 12
Xử lý dãy số: max, min, tìm kiếm, sắp xếpMảng, sort, tìm kiếm nhị phân6, 10
Bảng, lưới, bản đồMảng 2 chiều7
Chuẩn hóa xâu, đếm từ, đối xứngstring, getline, mã ASCII8
Danh sách nhiều thuộc tính, xếp hạngstruct, hàm so sánh cmp10
Loại trùng, đếm tần suất, ngoặc, hàng đợiset, map, stack, queue11, 13
Ước, UCLN, nguyên tốEuclid, $O(\sqrt n)$, sàng12
Nhiều câu hỏi về đoạn $[l, r]$Mảng cộng dồn, mảng hiệu13

Phần 2Quy trình 6 bước khi làm một bài thi

  1. Đọc kỹ đề, đọc hai lần. Gạch chân dữ liệu vào, dữ liệu ra, tên file, và đặc biệt là giới hạn ($n$ tối đa, giá trị lớn nhất).
  2. Tự làm ví dụ bằng tay. Nếu chưa tính tay ra đúng đáp án ví dụ thì chưa hiểu đề, đừng vội code.
  3. Chọn thuật toán theo giới hạn (bảng tra ở bài 9). Ước lượng số phép tính trước khi code. Nếu chỉ nghĩ được cách chậm, vẫn nên code nó để lấy điểm các test nhỏ.
  4. Code theo khung chuẩn: bits/stdc++.h, freopen, tăng tốc nhập xuất, long long.
  5. Thử với ví dụ và các test đặc biệt tự nghĩ: $n = 1$, mọi số bằng nhau, số âm, số 0, giá trị lớn nhất.
  6. Rà checklist bên dưới rồi mới nộp. Thi thật thường chỉ được nộp một lần!
MÔ PHỎNGPhòng thi thử: đồng hồ 180 phút và checklist trước khi nộpBấm Bắt đầu khi em bắt đầu làm đề ở phần 3. Đánh dấu từng mục checklist trước khi nộp mỗi câu. Trạng thái được lưu trên máy của em.
Đang tải mô phỏng…

Phần 3Đề thi thử nhập môn: 6 câu, 180 phút

Đề gồm 6 câu, tổng 20 điểm, mỗi câu chấm theo bộ test. Dữ liệu đọc từ bàn phím, ghi ra màn hình (khi luyện đề thi thật có file, hãy tự thêm freopen). Ngôn ngữ C++ hoặc Python. Gợi ý và code tham khảo được thu gọn, chỉ mở ra sau khi đã tự làm.

CâuTên bàiChủ đềĐiểm
1Tiền điệnRẽ nhánh, tính toán3
2Số tròn chục chữ sốVòng lặp, chữ số3
3Chuẩn hóa họ tênXâu ký tự3
4Bảng xếp hạng bóng đáStruct, sắp xếp nhiều tiêu chí3
5Ngày nắng nóngMảng cộng dồn4
6Tổng nguyên tố trên đoạnSàng + cộng dồn4
Bài 1Tiền điệnDễ

Giá điện tính theo bậc thang: 50 kWh đầu giá 1800 đồng/kWh; từ kWh thứ 51 đến 100 giá 1900; từ kWh thứ 101 đến 200 giá 2200; từ kWh thứ 201 trở đi giá 2500. Cho số điện $n$ ($0 \le n \le 10^9$) một hộ đã dùng, tính số tiền phải trả.

Input
150
Output
295000
💡 Gợi ý
Lỗi hay gặp là lấy cả $n$ nhân với giá của bậc cao nhất. Phải tính từng bậc: phần trong bậc 1 là $\min(n, 50)$; phần trong bậc 2 là $\min(n, 100) - 50$ nếu $n \gt 50$… Cách gọn: duyệt 4 bậc với mảng mốc {0, 50, 100, 200, ∞}, phần nằm trong bậc $k$ là $\max(0, \min(n, \text{mốc}_{k+1}) - \text{mốc}_k)$. Kết quả tới $2{,}5 \cdot 10^{12}$, phải dùng long long.
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

int main(){
    long long n;
    cin >> n;
    long long moc[5] = {0, 50, 100, 200, (long long)4e18};
    long long gia[4] = {1800, 1900, 2200, 2500};
    long long tien = 0;
    for(int k = 0; k < 4; k++){
        long long phan = min(n, moc[k + 1]) - moc[k];
        if(phan > 0) tien += phan * gia[k];
    }
    cout << tien;
    return 0;
}
n = int(input())
moc = [0, 50, 100, 200, float('inf')]
gia = [1800, 1900, 2200, 2500]
tien = 0
for k in range(4):
    phan = min(n, moc[k + 1]) - moc[k]
    if phan > 0:
        tien += int(phan) * gia[k]
print(tien)
C++▶ Chạy tay từng dòng codeCâu 1: tính tiền điện theo từng bậc, phần số điện rơi vào bậc k là min(n, mốc k+1) − mốc k.
Dữ liệu mẫu:
1#include <bits/stdc++.h>
2using namespace std;
3
4int main(){
5 long long n;
6 cin >> n;
7 long long moc[5] = {0, 50, 100, 200, (long long)4e18};
8 long long gia[4] = {1800, 1900, 2200, 2500};
9 long long tien = 0;
10 for(int k = 0; k < 4; k++){
11 long long phan = min(n, moc[k + 1]) - moc[k];
12 if(phan > 0) tien += phan * gia[k];
13 }
14 cout << tien;
15 return 0;
16}
Bài 2Số tròn chục chữ sốDễ

Một số được gọi là số tròn chục chữ số nếu tổng các chữ số của nó chia hết cho 10. Cho $a, b$ ($1 \le a \le b \le 10^6$), đếm các số tròn chục chữ số trong đoạn $[a, b]$.

Input
1 100
Output
9
💡 Gợi ý
Duyệt mọi số từ $a$ tới $b$, tính tổng chữ số bằng vòng lặp % 10, / 10 (mỗi số tối đa 7 chữ số). Tổng $7 \cdot 10^6$ phép tính, rất nhanh. Viết hàm tongCS(x) cho gọn (bài 5).
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

int tongCS(int x){
    int s = 0;
    while(x > 0){ s += x % 10; x /= 10; }
    return s;
}

int main(){
    int a, b;
    cin >> a >> b;
    int dem = 0;
    for(int x = a; x <= b; x++)
        if(tongCS(x) % 10 == 0) dem++;
    cout << dem;
    return 0;
}
a, b = map(int, input().split())
print(sum(1 for x in range(a, b + 1) if sum(map(int, str(x))) % 10 == 0))
Bài 3Chuẩn hóa họ tênTrung bình

Cho một dòng là họ tên được gõ lộn xộn: có thể thừa dấu cách ở đầu, cuối và giữa các từ, chữ hoa chữ thường lẫn lộn (chỉ gồm chữ cái tiếng Anh và dấu cách). Hãy chuẩn hóa: các từ cách nhau đúng một dấu cách, mỗi từ viết hoa chữ cái đầu, các chữ còn lại viết thường.

Input
  nGUYEN   van  aN 
Output
Nguyen Van An
💡 Gợi ý
Đọc cả dòng bằng getline (bài 8). Cách gọn nhất trong C++ là đưa dòng vào stringstream rồi đọc từng từ bằng >>: các dấu cách thừa tự bị bỏ qua. Với mỗi từ, chữ đầu đổi thành hoa bằng toupper, các chữ sau đổi thành thường bằng tolower, rồi nối các từ bằng đúng một dấu cách. Python: " ".join(w.capitalize() for w in s.split()).
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    getline(cin, s);
    stringstream ss(s);
    string w, kq = "";
    while(ss >> w){
        for(int i = 0; i < (int)w.size(); i++)
            w[i] = (i == 0) ? toupper(w[i]) : tolower(w[i]);
        if(kq != "") kq += " ";
        kq += w;
    }
    cout << kq;
    return 0;
}
s = input()
print(" ".join(w.capitalize() for w in s.split()))
Bài 4Bảng xếp hạng bóng đáTrung bình

Có $n$ đội bóng ($n \le 10^5$), mỗi dòng gồm tên đội (một từ), số bàn thắng, số bàn thua. Xếp hạng theo: hiệu số (thắng − thua) giảm dần; bằng hiệu số thì số bàn thắng giảm dần; vẫn bằng thì tên tăng dần theo thứ tự từ điển. In tên các đội theo thứ tự xếp hạng, mỗi tên một dòng.

Input
4
A 5 2
B 3 0
C 6 3
D 2 2
Output
C
A
B
D
💡 Gợi ý
Struct gồm ten, thang, thua và hàm cmp 3 tầng như bài 10: so hiệu số trước, rồi số bàn thắng, rồi tên. Nhớ cmp phải dùng >/< nghiêm ngặt. Python: key=lambda d: (-(d[1] - d[2]), -d[1], d[0]).
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

struct Doi { string ten; int thang, thua; };
Doi a[100005];

bool cmp(const Doi &x, const Doi &y){
    int hx = x.thang - x.thua, hy = y.thang - y.thua;
    if(hx != hy) return hx > hy;
    if(x.thang != y.thang) return x.thang > y.thang;
    return x.ten < y.ten;
}

int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) cin >> a[i].ten >> a[i].thang >> a[i].thua;
    sort(a, a + n, cmp);
    for(int i = 0; i < n; i++) cout << a[i].ten << "\n";
    return 0;
}
n = int(input())
a = []
for _ in range(n):
    t, w, l = input().split()
    a.append((t, int(w), int(l)))
a.sort(key=lambda d: (-(d[1] - d[2]), -d[1], d[0]))
print('\n'.join(d[0] for d in a))
Bài 5Ngày nắng nóngTrung bình

Có nhiệt độ của $n$ ngày liên tiếp ($n \le 10^5$). Một ngày gọi là nắng nóng nếu nhiệt độ từ 35 độ trở lên. Có $q$ câu hỏi ($q \le 10^5$), mỗi câu hỏi gồm $l, r$: từ ngày $l$ đến ngày $r$ có bao nhiêu ngày nắng nóng?

Input
7 3
30 36 35 20 40 34 35
1 3
4 7
1 7
Output
2
2
4
💡 Gợi ý
Mỗi câu hỏi đếm trực tiếp mất $O(n)$, tổng $O(n \cdot q) = 10^{10}$ → TLE, chỉ được điểm các test nhỏ. Dùng mảng cộng dồn (bài 13) trên dãy 0/1: $b_i = 1$ nếu ngày $i$ nóng. Gọi $S_i$ là số ngày nóng trong $i$ ngày đầu, đáp án là $S_r - S_{l-1}$, mỗi câu hỏi $O(1)$.
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

int S[100005];

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    int n, q;
    cin >> n >> q;
    for(int i = 1; i <= n; i++){
        int t; cin >> t;
        S[i] = S[i - 1] + (t >= 35 ? 1 : 0);
    }
    while(q--){
        int l, r; cin >> l >> r;
        cout << S[r] - S[l - 1] << "\n";
    }
    return 0;
}
import sys
d = sys.stdin.read().split()
n, q = int(d[0]), int(d[1])
S = [0] * (n + 1)
for i in range(1, n + 1):
    S[i] = S[i - 1] + (1 if int(d[1 + i]) >= 35 else 0)
p, out = 2 + n, []
for _ in range(q):
    l, r = int(d[p]), int(d[p + 1]); p += 2
    out.append(S[r] - S[l - 1])
print('\n'.join(map(str, out)))
C++▶ Chạy tay từng dòng codeCâu 5: S[i] đếm số ngày nóng trong i ngày đầu; mỗi câu hỏi (l, r) trả lời bằng S[r] − S[l−1].
Dữ liệu mẫu:
1#include <bits/stdc++.h>
2using namespace std;
3
4int S[100005];
5
6int main(){
7 int n, q;
8 cin >> n >> q;
9 for(int i = 1; i <= n; i++){
10 int t; cin >> t;
11 S[i] = S[i - 1] + (t >= 35 ? 1 : 0);
12 }
13 while(q--){
14 int l, r; cin >> l >> r;
15 cout << S[r] - S[l - 1] << "\n";
16 }
17 return 0;
18}
Bài 6Tổng nguyên tố trên đoạnKhá

Cho $q$ câu hỏi ($q \le 10^5$), mỗi câu hỏi gồm $l, r$ ($1 \le l \le r \le 10^6$): tính tổng các số nguyên tố trong đoạn $[l, r]$.

Input
3
1 10
10 20
2 2
Output
17
60
2
💡 Gợi ý
Ghép hai kỹ thuật: sàng Eratosthenes (bài 12) tìm mọi số nguyên tố tới $10^6$ một lần duy nhất, rồi mảng cộng dồn (bài 13) $P_i$ = tổng các số nguyên tố $\le i$. Đáp án mỗi câu hỏi là $P_r - P_{l-1}$. Tổng có thể vượt int (tổng các số nguyên tố dưới $10^6$ khoảng $3{,}7 \cdot 10^{10}$) nên dùng long long.
Xem code tham khảo (C++ / Python)
#include <bits/stdc++.h>
using namespace std;

const int N = 1000000;
bool hop[N + 5];
long long P[N + 5];

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    hop[0] = hop[1] = true;
    for(int i = 2; 1LL * i * i <= N; i++)
        if(!hop[i])
            for(int j = i * i; j <= N; j += i) hop[j] = true;
    for(int i = 1; i <= N; i++) P[i] = P[i - 1] + (hop[i] ? 0 : i);
    int q;
    cin >> q;
    while(q--){
        int l, r; cin >> l >> r;
        cout << P[r] - P[l - 1] << "\n";
    }
    return 0;
}
import sys
N = 10**6
nt = bytearray([1]) * (N + 1)
nt[0] = nt[1] = 0
i = 2
while i * i <= N:
    if nt[i]:
        nt[i * i::i] = bytearray(len(range(i * i, N + 1, i)))
    i += 1
P = [0] * (N + 1)
s = 0
for i in range(N + 1):
    if nt[i]:
        s += i
    P[i] = s
d = sys.stdin.read().split()
q = int(d[0])
out = []
for k in range(q):
    l, r = int(d[1 + 2 * k]), int(d[2 + 2 * k])
    out.append(P[r] - P[l - 1])
print('\n'.join(map(str, out)))
Tự đánh giá sau khi làm đề
16 – 20 điểm: em đã nắm chắc phần nhập môn, hãy bước sang lộ trình thuật toán. 10 – 15 điểm: rất tốt; xem lại câu bị mất điểm thuộc bài nào trong bảng ở phần 1 và làm thêm bài tập của bài đó. Dưới 10 điểm: đừng nản! Hãy học lại theo thứ tự các bài 3, 4, 6, 8, rồi làm lại đề sau một tuần. Câu 5 và 6 nếu chỉ code được cách duyệt trực tiếp thì vẫn lấy được khoảng một nửa số điểm, đó chính là lý do bài 9 khuyên “có cách chậm thì vẫn cứ nộp”.

Mô phỏng trực quan – Câu 1. Câu tiền điện bậc thang không khó về thuật toán nhưng rất nhiều bạn mất điểm vì tính nhầm cách "rót" kWh qua các bậc. Bảng giá dưới đây là bảng giá 4 bậc của đề (mốc 0, 50, 100, 200 kWh). Em nhập số kWh (thử cả 30 và 320 như các test mẫu) rồi bấm Tiếp xem từng bậc được lấp đầy ra sao; muốn thử bảng giá khác thì cứ sửa.

MÔ PHỎNGCâu 1: rót số kWh qua từng bậc giá điệnNhập số kWh, độ rộng các bậc và giá từng bậc (bậc cuối không giới hạn nên có thêm 1 mức giá).
bậc đang rótđã tính tiềnchưa dùng tới

Mô phỏng trực quan – Câu 5. Ý tưởng "đánh dấu 0/1 rồi cộng dồn" của câu 5 là cầu nối giữa bài 13 và đề thi. Em theo dõi ba hàng dưới đây: nhiệt độ → mảng đánh dấu → mảng cộng dồn, rồi xem mỗi câu hỏi được trả lời chỉ bằng một phép trừ.

MÔ PHỎNGCâu 5: đếm ngày nóng trên đoạn bằng đánh dấu + cộng dồnNhập nhiệt độ (tối đa 12 ngày), ngưỡng nóng và tối đa 5 câu hỏi "l r" cách nhau bởi dấu ;
ô đang tínhngày nóng trong đoạn hỏi, p[r]p[l − 1]ngày nóngngày không nóng / chưa tính

Phần 4Tự tạo test để kiểm tra bài của mình

Khi đi thi, không ai chấm hộ em. Kỹ năng quan trọng của người thi giỏi là tự kiểm tra. Cách chuyên nghiệp gọi là đối chiếu với lời giải “trâu”: viết thêm một chương trình trau.cpp làm theo cách chậm nhưng chắc chắn đúng (thường là duyệt trực tiếp), một chương trình sinh.cpp sinh test ngẫu nhiên nhỏ, rồi cho chạy cả hai và so sánh kết quả hàng trăm lần. Lệch nhau ở test nào thì test đó chính là chỗ bài “xịn” của em bị sai, mà lại là test nhỏ, dễ chạy tay để tìm lỗi.

Ví dụ: sinh test ngẫu nhiên (C++) và chương trình so sánh tự động (Python)
// sinh.cpp: sinh ngẫu nhiên một test nhỏ cho câu 5 (ghi ra màn hình)
#include <bits/stdc++.h>
using namespace std;

int main(int argc, char *argv[]){
    srand(atoi(argv[1]));                 // hạt giống ngẫu nhiên lấy từ tham số dòng lệnh
    int n = rand() % 10 + 1, q = rand() % 5 + 1;
    cout << n << " " << q << "\n";
    for(int i = 1; i <= n; i++) cout << rand() % 21 + 25 << " ";   // nhiệt độ 25..45
    cout << "\n";
    for(int k = 0; k < q; k++){
        int l = rand() % n + 1, r = rand() % n + 1;
        if(l > r) swap(l, r);
        cout << l << " " << r << "\n";
    }
    return 0;
}
# chay.py: chạy 500 test ngẫu nhiên, so sánh bài chính (bai.exe) với lời giải trâu (trau.exe)
import random, subprocess
for t in range(500):
    n, q = random.randint(1, 10), random.randint(1, 5)
    a = [random.randint(25, 45) for _ in range(n)]
    qs = [sorted((random.randint(1, n), random.randint(1, n))) for _ in range(q)]
    test = f"{n} {q}\n{' '.join(map(str, a))}\n" + ''.join(f"{l} {r}\n" for l, r in qs)
    kq1 = subprocess.run(["./bai.exe"], input=test, capture_output=True, text=True).stdout.split()
    kq2 = subprocess.run(["./trau.exe"], input=test, capture_output=True, text=True).stdout.split()
    if kq1 != kq2:
        print("SAI o test:\n" + test)
        break
else:
    print("Ca 500 test deu khop!")
Ba thói quen kiểm tra nhanh khi không có thời gian viết trâu
1. Tự làm thêm 2 – 3 ví dụ nhỏ bằng tay và chạy thử. 2. Chạy với test lớn nhất (sinh $n = 10^5$ số ngẫu nhiên) để đo thời gian, xem có TLE không. 3. Đọc lại code từ trên xuống một lượt, chỉ để soi các lỗi “ngớ ngẩn”: chỉ số mảng bắt đầu từ 0 hay 1, dấu < hay <=, biến chưa khởi tạo, int bị tràn.

Phần 5Học tiếp gì sau series nhập môn?

Hoàn thành 14 bài nhập môn là em đã xong “phần móng”. Chặng tiếp theo là học các thuật toán và cấu trúc dữ liệu theo thứ tự từ dễ đến khó: tìm kiếm nhị phân trên kết quả, hai con trỏ, tham lam, đệ quy quay lui, quy hoạch động, đồ thị (BFS, DFS, đường đi ngắn nhất)… Trang Lộ trình học thuật toán từ A đến Z sắp xếp sẵn các chủ đề này kèm hàng trăm bài tập có lời giải chi tiết trên blog. Mỗi ngày giải 1 – 2 bài, đều đặn vài tháng, em sẽ thấy mình tiến bộ rất rõ.

Rất vui khi anh em nào đã đọc đến những dòng cuối cùng này. Anh em đọc chắc cũng mỏi mắt luôn chứ 😅 vậy anh em nghĩ người viết ra hết đống ở trên còn thế nào nữa 🤪. Vậy nên đừng tiếc gì cho mình một lời bình luận hoặc chia sẻ bài viết để động viên mình nè. Chúc anh em học tốt và gặt hái nhiều thành công 😇
Bản quyền thuộc về Thầy Nguyễn Việt Nam Sơn. Bài viết, lời giải, hình minh hoạ và mã nguồn trên trang là công sức biên soạn của thầy qua nhiều năm giảng dạy. Vui lòng không sao chép, đăng lại hay sử dụng dưới mọi hình thức khi chưa được sự đồng ý của tác giả. Nếu thấy hữu ích, hãy chia sẻ bằng đường link bài gốc nhé. Cảm ơn bạn!
Tự học thuật toán: khó ở đâu?
Đọc xong một bài giải là bước đầu. Phần lớn học sinh tự học sẽ gặp những trở ngại sau:
  • Không biết học gì trước, học gì sau, học lan man nên kiến thức bị hổng.
  • Bí bài không ai gỡ, ngồi cả buổi vẫn không ra rồi bỏ cuộc.
  • Code chạy được nhưng không đủ điểm, không biết sai ở đâu, chậm ở đâu.
  • Không có đề thi thử và người chấm, nên không biết mình đang ở mức nào.
  • Dễ nản giữa chừng khi không có ai theo sát.
Học cùng thầy Nam Sơn, các trở ngại đó được gỡ bỏ:
  • Lộ trình 111 buổi video sắp sẵn từ dòng code đầu tiên đến đề HSG thật của các tỉnh.
  • Thầy trực tiếp gỡ bí, chữa bài cho từng em qua nhóm Zalo riêng.
  • Hệ thống chấm bài tự động 24/7 và thi thử HSG hằng tuần để biết chính xác mình đang ở đâu.
  • Đóng học phí một lần, thầy kèm lâu dài: từ thi chuyên Tin đến HSG quốc gia và cả khi lên đại học.

Nhận xét