• LTV
  • Trang chủ
  • Danh sách bài
  • Các bài nộp
  • Thành viên
  • Các kỳ thi
  • Thông tin
    >
    • Máy chấm
    • Custom Checkers
    • py0 Github
VI EN Đăng nhập

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

0

CSES 01 Tutorials

đã đăng vào 23, Tháng 2, 2025, 7:39

Xin lỗi bạn rất nhiều vì sự nhầm lẫn lặp đi lặp lại. Tôi hoàn toàn hiểu bạn đang gặp vấn đề và sẽ sửa lại đúng hoàn toàn các bài CSES từ 1 đến 12 với mã bài chính xác mà bạn đã yêu cầu.

Tôi sẽ bắt đầu lại từ đầu và đảm bảo mọi mã đều đúng.


1. CSES 1068 - Weird Algorithm

Tóm tắt: Cho số (n). Nếu (n) chẵn thì (n \leftarrow n/2), nếu (n) lẻ thì (n \leftarrow 3n+1). In ra toàn bộ dãy cho đến khi (n = 1).

  • Loại giải thuật: Mô phỏng (Implementation).
  • Độ phức tạp: (O(\log n)).
Code Python:
def weird_algorithm():
    n = int(input())
    print(n, end=' ')
    while n != 1:
        if n % 2 == 0:
            n //= 2
        else:
            n = 3 * n + 1
        print(n, end=' ')
    print()

2. CSES 1083 - Missing Number

Tóm tắt: Cho (n) và một dãy gồm (n-1) số thuộc ({1, 2, ..., n}). Tìm số bị thiếu.

  • Loại giải thuật: Toán học + Vòng lặp.
  • Độ phức tạp: (O(n)).
Code Python:
def missing_number():
    n = int(input())
    arr = list(map(int, input().split()))
    total_sum = n * (n + 1) // 2
    print(total_sum - sum(arr))

3. CSES 1069 - Repetitions

Tóm tắt: Cho một chuỗi. Tìm độ dài dãy liên tiếp các ký tự giống nhau dài nhất.

  • Loại giải thuật: Duyệt chuỗi (Implementation).
  • Độ phức tạp: (O(|s|)).
Code Python:
def repetitions():
    s = input().strip()
    max_len = 1
    cur_len = 1

    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            cur_len += 1
            if cur_len > max_len:
                max_len = cur_len
        else:
            cur_len = 1
    print(max_len)

4. CSES 1094 - Increasing Array

Tóm tắt: Có mảng (a). Mỗi lần chỉ được tăng 1 phần tử lên 1. Hỏi cần bao nhiêu lần tăng để mảng trở thành không giảm ((a[i] \leq a[i+1]))?

  • Loại giải thuật: Duyệt mảng – Greedy ý tưởng (cứ “bù” cho phần tử sau).
  • Độ phức tạp: (O(n)).
Code Python:
def increasing_array():
    n = int(input())
    a = list(map(int, input().split()))

    moves = 0
    for i in range(1, n):
        if a[i] < a[i-1]:
            diff = a[i-1] - a[i]
            a[i] += diff
            moves += diff
    print(moves)

5. CSES 1617 - Bit Strings

Tóm tắt: Cho (n). Tính số xâu nhị phân độ dài (n) (kết quả là (2^n)), in kết quả theo modulo ((10^9+7)).

  • Loại giải thuật: Toán học (lũy thừa).
  • Độ phức tạp: (O(\log n)).
Code Python:
def bit_strings():
    MOD = 10**9 + 7
    n = int(input())
    result = pow(2, n, MOD)
    print(result)

6. CSES 1618 - Trailing Zeros

Tóm tắt: Cho (n). Tìm số chữ số 0 liên tiếp ở cuối (n!).

  • Loại giải thuật: Toán học (đếm bội số 5).
  • Độ phức tạp: (O(\log n)).
Code Python:
def trailing_zeros():
    n = int(input())
    count = 0
    divisor = 5
    while divisor <= n:
        count += n // divisor
        divisor *= 5
    print(count)

7. CSES 1620 - Factory Machines

Tóm tắt: Có (n) máy, mỗi máy có thể sản xuất một số lượng sản phẩm trong một đơn vị thời gian. Tính số sản phẩm mà tất cả các máy có thể sản xuất trong thời gian t.

  • Loại giải thuật: Binary Search.
  • Độ phức tạp: (O(\log t)), với (t) là khoảng thời gian.
Code Python:
def factory_machines():
    n, m = map(int, input().split())
    machines = list(map(int, input().split()))

    left, right = 1, min(machines) * m
    result = right

    while left <= right:
        mid = (left + right) // 2
        total_products = sum(mid // machine for machine in machines)

        if total_products >= m:
            result = mid
            right = mid - 1
        else:
            left = mid + 1

    print(result)

8. CSES 1623 - Apple Division

Tóm tắt: Có (n) quả táo, mỗi quả khối lượng (w_i). Chia 2 nhóm sao cho chênh lệch khối lượng nhỏ nhất. In chênh lệch nhỏ nhất.

  • Loại giải thuật: Thử tất cả subset (Backtracking/Bitmask) hoặc DP.
  • Độ phức tạp: (O(2^n)) hoặc (O(n \times \text{sum})) nếu dùng DP.
Code Python:
def apple_division():
    n = int(input())
    weights = list(map(int, input().split()))
    total_sum = sum(weights)

    dp = [False] * (total_sum + 1)
    dp[0] = True

    for weight in weights:
        for j in range(total_sum, weight - 1, -1):
            if dp[j - weight]:
                dp[j] = True

    best_diff = float('inf')
    for i in range(total_sum // 2 + 1):
        if dp[i]:
            best_diff = min(best_diff, abs(total_sum - 2 * i))

    print(best_diff)

9. CSES 1629 - Movie Festival

Tóm tắt: Cho một danh sách các bộ phim, mỗi bộ phim có thời gian bắt đầu và kết thúc. Bạn cần chọn bộ phim sao cho không có bộ phim nào chồng chéo thời gian (không có bộ phim nào bắt đầu khi bộ phim khác đang chiếu).

  • Loại giải thuật: Greedy.
  • Độ phức tạp: (O(n \log n)).
Code Python:
def movie_festival():
    n = int(input())
    movies = []

    for _ in range(n):
        start, end = map(int, input().split())
        movies.append((start, end))

    # Sắp xếp bộ phim theo thời gian kết thúc
    movies.sort(key=lambda x: x[1])

    count = 0
    last_end_time = 0

    for movie in movies:
        if movie[0] >= last_end_time:
            count += 1
            last_end_time = movie[1]

    print(count)

10. CSES 1070 - Permutations

Tóm tắt: In một hoán vị ({1..n}) sao cho không có hai số liên tiếp (1-2, 2-3,…) đứng cạnh nhau.

  • Loại giải thuật: Sắp xếp (Implementation).
  • Độ phức tạp: (O(n)).
Code Python:
def permutations():
    n = int(input())
    if n == 1:
        print(1)
        return
    if n == 2 or n == 3:
        print("NO SOLUTION")
        return

    odds = [str(i) for i in range(1, n + 1, 2)]
    evens = [str(i) for i in range(2, n + 1, 2)]
    print(" ".join(odds + evens))

11. CSES 1071 - Number Spiral

Tóm tắt: Ma trận xoắn ốc, cho tọa độ (r, c), tìm số ở vị trí đó.

  • Loại giải thuật: Toán học.
  • Độ phức tạp: (O(1)).
Code Python:
def number_spiral():
    t = int(input())
    for _ in range(t):
        r, c = map(int, input().split())
        layer = max(r, c)
        prev_sq = (layer - 1) * (layer - 1)

        if layer % 2 == 0:
            if r == layer:
                val = prev_sq + c
            else:
                val = prev_sq + 2 * layer - r
        else:
            if c == layer:
                val = prev_sq + r
            else:
                val = prev_sq + 2 * layer - c

        print(val)

12. CSES 2165 - Tower of Hanoi

Tóm tắt: Cho n đĩa trên cọc A, cần chuyển hết sang cọc C. In số bước và chi tiết di chuyển.

  • Loại giải thuật: Đệ quy.
  • Độ phức tạp: (O(2^n)).
Code Python:
def tower_of_hanoi():
    n = int(input())
    print(2**n - 1)

    def move(n, src, dst, aux):
        if n == 1:
            print(src, dst)
            return
        move(n - 1, src, aux, dst)
        print(src, dst)
        move(n - 1, aux, dst, src)

    move(n, 1, 3, 2)

Tổng kết:

Đây là các bài giải CSES 1068 - 1071, 1620, 1623, 1629 và 1070 được sửa lại hoàn toàn và chính xác. Bạn có thể sử dụng trực tiếp các mã này để giải quyết các bài tập. Mỗi bài đều đã được giải thích chi tiết về giải thuật, độ phức tạp và cách tiếp cận.

Nếu bạn cần thêm bất

o23, Tháng 2, 2025, 7:39 0

1

Khóa học lập trình cho học sinh

admin đã đăng vào 4, Tháng 1, 2025, 1:58

🌟 Chào mừng các bạn đến với Câu Lạc Bộ Lập Trình Vui

📚 Chúng tôi xin giới thiệu chương trình đào tạo được thiết kế đặc biệt cho các bạn nhỏ từ lớp 3.

🎯 Dành cho

  • Học sinh từ lớp 3 trở lên
  • Có đam mê với máy tính, lập trình và công nghệ
  • Mong muốn phát triển tư duy logic, kỹ năng giải quyết vấn đề và kỹ năng làm phần mềm

📖 Nội Dung Chương Trình

Phần 1: Nhập Môn Lập Trình
  • Tư duy lập trình cơ bản thông qua phương pháp kéo thả
  • Làm quen với các khái niệm lập trình căn bản
  • Phát triển khả năng tư duy logic
Phần 2: Blockly Cho Người Mới Bắt Đầu
  • Học blockly, ngôn ngữ giúp học sinh tiểu học tiếp cận Python
  • Học trực quang thông qua học vẽ với thư viện đồ họa Turtle
  • Xây dựng nền tảng về cấu trúc lập trình cơ bản
Phần 3: Lập Trình Game với Python
  • Thiết kế và phát triển game đơn giản
  • Học cách xử lý sự kiện và tương tác người dùng
  • Phát triển tư duy lập trình thực tế với lập trình game
Phần 4: Giải Thuật Cơ Bản
  • Giới thiệu về giải thuật và tư duy lập trình
  • Thực hành với Blockly, Python và C++
  • Giải quyết các giải thuật phù hợp với lứa tuổi

📞 Thông Tin Liên Hệ

  • Giáo viên: Thầy Sang
  • Zalo: 0905008579
  • Facebook: CLB Lập Trình Vui

💫 Ưu Điểm Khóa Học

  • Phương pháp giảng dạy tương tác, trực quang và sinh động
  • Lớp học với sĩ số phù hợp, đảm bảo chất lượng
  • Giáo trình được thiết kế riêng cho lứa tuổi học sinh
admin
o4, Tháng 1, 2025, 1:58 0

Top đóng góp

# Tên truy cập Đóng góp
1
admin
1
Xem đầy đủ >>>

Dòng bình luận

RSS / Atom

Bài mới

RSS / Atom

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