1. Trang chủ
  2. » Giáo án - Bài giảng

Dap an tin hoc 11

4 3 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

HƯỚNG DẪN ĐỀ THI HSG VÙNG DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ LẦN THỨ XIII (Đề thi trường THPT Chuyên Thái Bình đề xuất) Bài 1: Dãy số (6 điểm) Sub 1: Độ phức tạp O(Q.n3) Với truy vấn, ta xét dãy liên tiếp kiểm tra trực tiếp điều kiện cho Sub 2: Độ phức tạp O(n+ Q.log2(n)) • • • • • Trước hết, tạo mảng L[i] vị trí xa i bên trái cho a[L[i]] > a[i] Như tất phần tử thuộc đoạn [L[i]+1 …i] không lớn a[i] Tương tự, tạo mảng R[i] vị trí xa i bên cho a[R[i]] > a[i] , tất phần tử thuộc đoạn [i…R[i]–1] không lớn a[i] Suy phần tử thuộc đoạn [L[i]+1…R[i]–1] (có tất R[i] – L[i] – phần tử) không lớn a[i] Ta lưu tất giá trị (R[i] – L[i] – 1) vào mảng b[i] tương ứng Sau đó, sort mảng A tăng dần, mảng B tráo đổi phần tử phụ thuộc vào xếp mảng A Với truy vấn, ta chặt nhị phân dãy A để tìm vị trí p thỏa mãn a[p] K p lớn Sau giá trị MAX(b[1] b[p]) kết Chú ý: - Các mảng L R dùng Deque QHĐ trực tiếp để tính O(n) - Để tính MAX(b[1] b[i]) ta ta chuẩn bị trước mảng maxb[i] lấy MAX(b[1] b[i]) O(1) Bài 2: Khu đất (7 điểm) Trường hợp k = 1: Cách 1: ĐPT O(n2 * log n) For góc trái (hoặc góc phải được), chặt nhị phân cạnh hình vng Rõ ràng hình to tồn đương nhiên hình bé tồn Để kiểm tra có tồn hình vng khơng đơn giản ta dùng mảng cộng dồn, tính tổng ok Cách 2: Có thuật tốn đơn giản hơn, khơng cần chặt nhị phân, tìm kiếm tuyến tính Vẫn For điểm trái Khởi tạo best = 0; For (i: m) For (j: n) For (r: min(m,n)) If (psum(i, j, r) best) best = r; Cài đặt ĐPT: O(n^3)  Cải tiến: For (i: m) For (j: n) For (r: best + min(m,n)) If (psum(i, j, r) best) best = r;} Else break; ĐPT: O(n2 + n ) Trường hợp k = 2: Bất kì hình vng khơng nằm đè lên ln tồn lát cắt để tách làm hai nửa Xét TH: cắt ngang cắt dọc Bây ta xét cắt dọc Còn TH cắt ngang giải tương tự/ xoay bảng Khi cắt dọc cần thử xem điểm cắt điểm nào? Nếu có mảng F với ý nghĩa: F(c, t) = r: sử dụng xét cột từ đến c, có số tiền t có hình vng cạnh lớn bao nhiêu? Số tiền t lớn  QHĐ đảo nhãn F(c, r1) = t1: Từ cột đến cột c, muốn lấy hình vng cạnh r1 số tiền cần dùng bao nhiêu? G(c+1, r2) = t2: từ cột c+1 đến n, muốn lấy hình vng cạnh r2 số tiền cần dùng bao nhiêu? Sau có mảng F G ta xử lí sau: For c | For r1 | For r2 F(c, r1) + G(c+1, r2) < = t chọn phương án r1* r1 + r2* r2  cập nhật kết Tính F, G? Mảng h(c, r): hình vng có cạnh r bên phải tiếp xúc với c số tiền For c | For r | for i  O(n3) Trượt c F(c, r) = (F(c-1, r), h(c,r)) Bài 3: Đường (7 điểm) Sub1: Áp dụng Dijsktra (cải tiến) để tìm đường ngắn từ đỉnh thuộc nA tới đỉnh thuộc nB kiểm tra trực tiếp xem có W Thuật full: Ta thấy đếm số lượng đường có trọng số nhỏ W khó nhiều so với cách đếm số lượng đường có trọng số nhỏ

Ngày đăng: 21/10/2022, 00:00

w