Thông tin
Sau đây là lời giải của Kỳ thi Tin học trẻ bảng B tỉnh Bà Rịa - Vũng Tàu năm học 2019 - 2020.
Bạn đọc có thể nộp và chấm bài (test tự sinh) TẠI ĐÂY.
Chuẩn bị bởi team Logica, thuộc khuôn khổ dự án The Algitect (ALGI Project)
Cho số nguyên dương .
Yêu cầu: Đếm số lượng bộ ba số nguyên dương thỏa mãn và là độ dài ba cạnh của một tam giác vuông.
Dữ liệu đảm bảo: .
Các bộ thỏa mãn bài toán là các bộ ba Pytago thỏa .
Theo công thức Euclid, ta có khái niệm bộ ba Pytago nguyên tố là bộ trong đó:
là các số nguyên tố cùng nhau, nghĩa là , và đúng một trong chúng là số chẵn.
Từ một bộ ba Pytago nguyên tố, ta có thể tạo ra một bộ ba Pytago bằng cách nhân một số nguyên dương vào cả . Tức là .
Như vậy, ta có thể duyệt qua và để thử mọi bộ ba Pytago nguyên tố, sau đó lại kiểm tra xem có một bộ ba Pytago nào có thể được tạo ra thỏa mãn không.
Cách duyệt tối ưu
Ta duyệt qua mọi từ đến , sau đó ta duyệt từ (vì ) và dừng vòng lặp khi hoặc .
Vì hai số phải khác tính chẵn lẻ, trong vòng lặp ta luôn cộng lên .
Độ phức tạp thời gian: .
Thực tế, độ phức tạp nhỏ hơn nhiều, nhưng khó tính được chính xác.
Có người, người thứ ở sân bay trong khoảng thời gian từ đến .
Yêu cầu: Tìm số người lớn nhất trong sân bay ở cùng một thời điểm.
Dữ liệu đảm bảo: và .
Gọi là số người trong sân bay tại thời điểm .
Như vậy, nếu người thứ ở sân bay từ đến , ta tăng giá trị của lên .
Tối ưu
Tăng giá trị của nhanh bằng mảng hiệu.
Dễ nhận thấy không thể lưu trữ mảng với phần tử.
Nhưng số lượng giá trị khác nhau chỉ đạt tối đa . Do đó ta dùng kĩ thuật nén số.
Đáp án:
Độ phức tạp thời gian: .
Yêu cầu: in ra số lượng món hàng có thể mua được.
Dữ liệu đảm bảo:
Áp dụng quy hoạch động cái túi.
Đáp án: Món hàng thứ i có thể mua được nếu .