• TICA OJ
  • Trang chủ
  • Danh sách bài
  • Các bài nộp
  • Thành viên
  • tổ chức
  • Các kỳ thi
  • Thông tin
    >
    • Máy chấm
    • Custom Checkers
    • Github
VI EN Đăng nhập  hoặc  Đăng ký

  • Thông tin
  • Stats
  • Blog
  • Tuts

xaukytu

thinhdt published on 19, Tháng 11, 2025, 14:34

📘 HƯỚNG DẪN CƠ BẢN VỀ XÂU KÝ TỰ (STRING) TRONG PYTHON

1️⃣ Xâu ký tự là gì?

👉 Xâu ký tự (string) là một tập hợp các ký tự (chữ cái, chữ số, ký hiệu…) được đặt trong dấu " " hoặc ' '.

Ví dụ:

s = "Hello"
print(s)

📌 Ở đây:

  • "Hello" là một xâu ký tự
  • Biến s dùng để lưu xâu đó

2️⃣ Mỗi ký tự trong xâu giống như phần tử của mảng

Trong Python, mỗi ký tự của xâu có một vị trí (chỉ số).

⚠️ Chỉ số bắt đầu từ 0, không phải từ 1.

Với xâu:

s = "Hello"
Ký tự H e l l o
Chỉ số 0 1 2 3 4

3️⃣ Truy cập từng ký tự trong xâu

print(s[0])  # ký tự thứ 1
print(s[1])  # ký tự thứ 2
print(s[2])  # ký tự thứ 3

📌 Kết quả:

H
e
l

4️⃣ Ký tự đầu tiên và ký tự cuối cùng của xâu

🔹 Ký tự đầu tiên
print(s[0])
🔹 Độ dài của xâu
print(len(s))

📌 Với s = "Hello" thì:

len(s) = 5
🔹 Ký tự cuối cùng
print(s[len(s) - 1])

👉 Vì chỉ số bắt đầu từ 0 nên:

  • Ký tự cuối có chỉ số = len(s) - 1

5️⃣ Duyệt từng ký tự của xâu bằng vòng lặp

for item in s:
    print(item)

📌 Mỗi lần lặp:

  • Biến item sẽ lưu 1 ký tự trong xâu s

Kết quả:

H
e
l
l
o

6️⃣ Tạo xâu con (substring)

🔹 Cú pháp chung
s[start : end]

📌 Lấy các ký tự từ:

  • chỉ số start
  • đến trước chỉ số end

🔹 Ví dụ 1: Lấy từ chỉ số 0 đến 2
tmp = s[0:3]
print(tmp)

👉 Lấy:

  • s[0], s[1], s[2]

Kết quả:

Hel

🔹 Ví dụ 2: Lấy từ chỉ số 1 đến 3
tmp = s[1:4]
print(tmp)

👉 Lấy:

  • s[1], s[2], s[3]

Kết quả:

ell

7️⃣ Ghi nhớ quan trọng ⭐

✅ Chỉ số xâu luôn bắt đầu từ 0
✅ len(s) là độ dài xâu
✅ Ký tự cuối cùng có chỉ số len(s) - 1
✅ Cắt xâu: lấy từ start → trước end


📌 Dạng bài xâu ký tự xuất hiện rất nhiều trong:

  • Tin học trẻ
  • Bài xử lý dữ liệu
  • Bài xử lý tên, mã, chuỗi ký tự

👉 Nắm vững phần này sẽ giúp các con làm tốt rất nhiều bài nâng cao sau này 💪

thinhdt
o19, Tháng 11, 2025, 14:34

Thuật toán tham lam

thinhdt published on 28, Tháng 7, 2025, 15:08

Thuật Toán Tham Lam (Greedy)

1️⃣ Thuật toán tham lam là gì?

Thuật toán tham lam nghĩa là:

👉 Ở mỗi bước, mình luôn chọn thứ “tốt nhất ngay lúc này”. Không cần suy nghĩ quá xa, chỉ nhìn cái lợi trước mắt.

Tuy đơn giản, nhưng nhiều bài toán lại giải được rất nhanh nhờ cách này.


2️⃣ 🎒 Ví dụ đời thường: Thuật toán tham lam là gì?

Mẹ đưa cho các bạn 2 tờ tiền:

  • Một tờ 100.000 đ
  • Một tờ 200.000 đ

Và nói:

👉 “Các con chỉ được chọn 1 tờ!”

Vậy tụi em chọn tờ nào?

➡️ Tờ 200.000 đ

Vì nó có giá trị lớn hơn, dù:

  • kích thước giống nhau
  • hình dạng giống nhau
  • số lượng đều là 1 tờ

🎯 Đây chính là cách suy nghĩ của thuật toán tham lam:

👉 Trong mọi lựa chọn, mình luôn chọn cái mang lại giá trị lớn nhất ngay lúc đó.


🧩 Liên hệ giải thuật tham lam

Trong lập trình:

  • Mỗi bước ta chọn giá trị tốt nhất ngay lúc đó
  • Và tiếp tục như vậy cho đến hết bài

Nếu tiêu chí đúng → ta sẽ có lời giải tối ưu.


3️⃣ Khi nào dùng được thuật toán tham lam?

Greedy chỉ đúng khi bài toán có 2 tính chất:

  1. Lựa chọn tối ưu tại hiện tại → dẫn đến kết quả cuối cùng tốt nhất
  2. Bài toán con giống bài toán lớn (optimal substructure)

❗ Nếu không có 2 tính chất này → dùng tham lam sẽ sai.

thinhdt
o28, Tháng 7, 2025, 15:08

Demo 1

thinhdt published on 19, Tháng 7, 2025, 15:36

Given an integer n, count the total number of digits 1 appearing in all positive integers less than or equal to n.

Examples:

Input : n = 13 Output: 6 Explanation: Here, no <= 13 containing 1 are 1, 10, 11, 12, 13. So, total 1s are 6.

Input : n = 5 Output: 1 Explanation: Here, no <= 13 containing 1 is 1. So, the total 1s are 1..

thinhdt
o19, Tháng 7, 2025, 15:36

dựa trên nền tảng DMOJ | theo dõi VNOI trên Github và Facebook