• LCOJ
  • Trang chủ
  • 🧩 Problems
  • 📤 Submissions
  • 👥 Users
    >
    • 🏛️ Organizations
  • 🏆 Contests
    >
    • ⌛ Trắc nghiệm
  • 📚 Resources
    >
    • 🐍 Học Python
    • 💵 Tài chính cá nhân
    • 📝 Blog
  • ℹ️ About
    >
    • 📝 LCOJ docs
    • 🟢 Status
    • 💡 Mẹo
    • 📘 FAQ
    • Theme
    • Ngôn ngữ VI EN
Đăng nhập  hoặc  Đăng ký

Chào mừng bạn đến với Luyện Code!

Luyện Code Online (LCOJ) là nền tảng học lập trình trực tuyến chú trọng thực hành. Chúng tôi cung cấp kho bài tập phong phú đi kèm chức năng chấm code trực tuyến giúp người học ngay lập tức biết lời giải của mình đúng hay sai.

Hệ thống bài tập của LCOJ được phân loại chi tiết và được thiết kế để phù hợp với những bạn mới học lập trình. Hơn hết, LCOJ là miễn phí và dành cho bất kỳ ai có mong muốn học lập trình.

Còn chờ gì nữa, hãy đăng ký tài khoản. Sau đó, tham khảo lộ trình học tập rồi thử sức với bài tập đầu tiên nhé.

  • Blog
  • Sự kiện
  • Tin tức
  • Blog

0

Mê cung lượng tử

Tnk2014nb đã đăng vào 21, Tháng 8, 2026, 3:06

Cho một ma trận n × m, mỗi ô chứa một số nguyên.

Bạn bắt đầu tại ô (1,1) và cần đi đến (n,m).

Mỗi bước, bạn có thể đi lên, xuống, trái hoặc phải.

Tuy nhiên, có một luật đặc biệt:

Nếu đang ở ô có giá trị x, bạn chỉ được đi sang ô có giá trị lớn hơn x. Mỗi ô chỉ được phép đi qua tối đa 1 lần. Bạn được phép thay đổi giá trị của đúng một ô thành bất kỳ số nguyên nào. Hãy tìm đường đi dài nhất có thể từ (1,1) đến (n,m).

Input:

3 3 1 2 3 2 1 4 3 4 5

Output:

5

Tnk2014nb
o21, Tháng 8, 2026, 3:06 0

1

Sao không làm gì mình cũng bị trừ đóng góp

phongphuc13 đã đăng vào 19, Tháng 8, 2026, 11:19

sao mình không làm gì cũng bị trừ điểm đóng góp vậy ,lúc lập Acc là -5,giờ xuống -12 ,

phongphuc13
o19, Tháng 8, 2026, 11:19 0

-1

lên lớp 7

hao2014 đã đăng vào 19, Tháng 8, 2026, 7:42

tôi rất vui

hao2014
o19, Tháng 8, 2026, 7:42 0

-3

a i h o i r c h a u s

thanhtinhocntt đã đăng vào 7, Tháng 8, 2026, 1:12

cos ai biets mangr donw gianr khongo

thanhtinhocntt
o7, Tháng 8, 2026, 1:12 1

-1

Xin chào

caodanganhkhoa2015 đã đăng vào 28, Tháng 6, 2026, 15:21

Xin chào, mình là người mới. Mong mọi người giúp đỡ ạ!!

caodanganhkhoa2015
o28, Tháng 6, 2026, 15:21 0

-1

blabla

bgb đã đăng vào 19, Tháng 5, 2026, 3:55

contest rated xong thì khi nào có rated v mn :v , đợi 3th r =)))

bgb
o19, Tháng 5, 2026, 3:55 0

-3

Cách giải bài SUMDIG trên Python 3

thanhvinh21052015 đã đăng vào 23, Tháng 3, 2026, 12:39

m = int(input()) for i in range(m): n = int(input()) d = 0 while n != 0: d += n % 10 n //= 10 print(d)

thanhvinh21052015
o23, Tháng 3, 2026, 12:39 0

-3

Cách để giải bài CB01

thanhvinh21052015 đã đăng vào 22, Tháng 3, 2026, 2:34

Cách làm là print("Lap Trinh Khong Kho!")

thanhvinh21052015
o22, Tháng 3, 2026, 2:34 0

2

Stack - Cấu Trúc Dữ Liệu Kỳ Diệu Của Lập Trình Viên

Hiếu Nguyễn đã đăng vào 4, Tháng 3, 2026, 10:36

Stack là cấu trúc dữ liệu cực kỳ quan trọng trong lập trình. Khám phá các ứng dụng thú vị của stack từ call stack đến browser history!

Đọc tiếp...

Hiếu Nguyễn
o4, Tháng 3, 2026, 10:36 5

33

Tìm hiểu LRU Cache - Thuật toán phổ biến trong hệ thống Cache

Hoàng Đức Khải đã đăng vào 3, Tháng 3, 2026, 6:53

LRU Cache là gì?

LRU (Least Recently Used) là thuật toán loại bỏ dữ liệu ít được sử dụng gần đây nhất khi bộ nhớ cache đầy.

Use cases thực tế

1. Browser Cache

Khi bạn lướt web, trình duyệt lưu trữ các tài nguyên (JS, CSS, images). Khi cache đầy, LRU quyết định xóa resource nào không còn cần thiết.

2. Database Query Cache

MySQL và PostgreSQL dùng LRU để cache kết quả truy vấn, giúp truy vấn lặp lại nhanh hơn đáng kể.

3. Redis Memory Management

Khi maxmemory đạt giới hạn, Redis dùng LRU policy để evict keys:

maxmemory 256mb
maxmemory-policy allkeys-lru
4. Operating System Page Cache

OS dùng LRU để quyết định page nào giữ trong RAM, page nào swap ra disk.

Thuật toán đằng sau

Tại sao cần HashMap + Doubly Linked List?

Để implement LRU cache hiệu quả, chúng ta cần 2 operations chính:

  1. Tìm kiếm theo key - O(1)
  2. Xác định và xóa item ít dùng nhất - O(1)

Nếu chỉ dùng 1 cấu trúc dữ liệu:

Cấu trúc get(key) evict LRU
Array/List O(n) O(1)
HashMap O(1) O(n)
Linked List O(n) O(1)

=> HashMap + Doubly Linked List cho ta O(1) cho cả 2 operations!

Cách hoạt động
  • HashMap: Map key -> node trong linked list (tìm kiếm nhanh)
  • Doubly Linked List: Lưu thứ tự sử dụng, node gần đầu = mới dùng, gần đuôi = cũ nhất

Khi access một key:

  1. HashMap tìm node trong O(1)
  2. Move node lên đầu linked list (xóa khỏi vị trí cũ, thêm vào đầu)
  3. Khi cache đầy, xóa node cuối cùng (tail.prev)
Implementation
class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}  # key -> node
        self.head = Node()  # dummy head
        self.tail = Node()  # dummy tail
        self.head.next = self.tail
        self.tail.prev = self.head

    def get(self, key):
        if key in self.cache:
            node = self.cache[key]
            self._move_to_front(node)
            return node.value
        return -1

    def put(self, key, value):
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_front(node)
        else:
            node = Node(key, value)
            self.cache[key] = node
            self._add_to_front(node)
            if len(self.cache) > self.capacity:
                lru = self.tail.prev
                self._remove(lru)
                del self.cache[lru.key]

    def _move_to_front(self, node):
        self._remove(node)
        self._add_to_front(node)

Độ phức tạp: O(1) cho cả get và put

Cách 2: Ordered Dict (Python)
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key):
        if key in self.cache:
            self.cache.move_to_end(key)
            return self.cache[key]
        return -1

    def put(self, key, value):
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)

So sánh các variant

Algorithm Pros Cons
LRU Tối ưu cho temporal locality Overhead cao
LFU Tối ưu cho frequency Không adapt được với pattern thay đổi
FIFO Đơn giản, nhanh Không consider usage
Random Rất đơn giản Không predict được

Khi nào dùng LRU?

  • Session data: User sessions, shopping cart
  • API response cache: Kết quả API không thay đổi thường xuyên
  • Pagination cache: Cache các trang đã duyệt
  • Computation cache: Kết quả tính toán nặng
Hoàng Đức Khải
o3, Tháng 3, 2026, 6:53 7
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »

Các kỳ thi đang diễn ra

Scratch_Danh Sách
Kết thúc trong 2 ngày 06:02:18.
SỐ HỌC VÀ TỔ HỢP
Kết thúc trong 3 ngày 06:02:18.
Scratch_Đề luyện tập 1
Kết thúc trong 4 ngày 06:02:18.
Scratch_Vòng Lặp
Kết thúc trong 7 ngày 06:02:18.
Scratch_Đề luyện tập 2
Kết thúc trong 8 ngày 06:02:18.
Scratch_Đề luyện tập 3
Kết thúc trong 8 ngày 06:02:18.
LV1_Ôn thi hsg THPT
Kết thúc trong 9 ngày 06:02:18.
Vòng Lặp lồng nhau_Vẽ hình
Kết thúc trong 13 ngày 06:02:18.

Các kỳ thi sắp tới

Scratch_Đề luyện tập 4
Bắt đầu trong 15 ngày 06:02:18.
Scratch_Đề luyện tập 5
Bắt đầu trong 43 ngày 06:02:18.

Top thành viên

# Tên truy cập Rating
1
buianhnhat2011
2534
2
iwannabetheguy
2301
3
ntbn2011
2046
4
DL_DinhVuMinhHung2k8
2015
5
Vkhang
1974
Tổ chức Xem đầy đủ >>>

Top đóng góp

# Tên truy cập Đóng góp
1
Hiếu Nguyễn
365
2
dinhvantung0611
258
3
hao2014
158
4
CTV2
84
5
tri_88
83
Xem đầy đủ >>>

Dòng bình luận

  • phongphuc13 → Lát gạch
  • Son1 → Phân tích chuỗi thành Palindrom
  • taphoccode → tÌM SỐ NGUYÊN TỐ LỚN NHẤT
  • phongphuc13 → Lát gạch
  • nguyentuananh201375 → Tính tổng S = (2 + 3 + 4... + n) + 2n
  • nguyentuananh201375 → Tính tổng S = 1 + 2 + 3 + ... + n
  • phongphuc13 → CHIA KẸO TỐI ƯU
  • phongphuc13 → Con ếch
  • phoangphong05 → 3 số lớn nhất mảng
  • mducc → Trò chơi vòng kẹo
RSS / Atom

Bài mới

  • TRNGTHNGUYNTRAIDJKLK_ - Scratch cơ bản
  • 02 - Scratch cơ bản
  • HIEUVANG - Hiếu đầu tư vàng
  • SOSANHDAUTU - So Sánh Hai Kế Hoạch Đầu Tư
  • GOPMUCTIEU - Mức Góp Để Đạt Mục Tiêu
  • QUYKHANCAP - Hoàn Thành Quỹ Khẩn Cấp
  • SIPTICHLUY - Tích Lũy Đầu Tư Định Kỳ
RSS / Atom

dựa trên VNOJ | Github | Facebook