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

ĐÁP án DE TIN 10 2022

3 1 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 68 KB

Nội dung

SỞ GD&ĐT QUẢNG NGÃI KỲ THI CHỌN HỌC SINH GIỎI TRƯỜNG THPT KHU VỰC DUYÊN HẢI & ĐỒNG BẰNG BẮC BỘ CHUYÊN LÊ KHIẾT LẦN THỨ XIII HƯỚNG DẪN CHẤM MƠN TIN HỌC – KHỐI 10 (Hướng dẫn có 03 trang) Câu (6 điểm) Xe tăng - Gọi s[i] = a[1] + a[2] + + a[i]  Tổng a[i]+a[i+1]+ +a[j] = s[j]-s[i-1] - Với đoạn có độ dài len, ta kiểm tra xe tăng có qua vùng đất từ A đến B hay không, cần chọn len nhỏ - Để kiểm tra với độ dài len, xe tăng qua vùng đất từ A đến B hay không, ta cần xét với i = n-len+1 s[i+len-1] – s[i-1] lớn M Cách ĐPT: O(n2) Duyệt len = n, chọn len nhỏ xe tăng qua vùng đất từ A đến B Cách 2: ĐPT: O(nlog(n)) - Nhận thấy, với độ dài len thỏa, len+1, len+2, , n thỏa, với độ dài len khơng thỏa len-1, len-2, , khơng thỏa Do đó, ta dùng thuật tốn tìm kiếm nhị phân để tìm độ dài len Câu (7 điểm) Dãy - Gọi s[i] = a[1] + a[2] + + a[i]  Tổng a[i]+a[i+1]+ +a[j] = s[j]-s[i-1] Cách 1: ĐPT O(n3) Duyệt for tương ứng với giá trị x1, x2, x3 theo để cập nhật kết tối ưu theo công thức đề cho: Res = max(Res, Sum(1,x1)-Sum(x1,x2)+Sum(x2,x3)- Sum(x3, n+1)); Cách 2: ĐPT O(n2) - Duyệt for(x2,1,n+1) + Tìm vị trí x1∈[1, x2] cho:A = Sum(1,x1)-Sum(x1,x2) = s[x1-1] – (s[x2-1] – s[x1-1]) đạt giá trị cực đại + Tìm vị trí x3∈[x2, n+1] cho B = Sum(x2,x3)- Sum(x3, n+1) = s[x3-1] – s[x2-1] –( s[n] – s[x3-1]) đạt giá trị cực đại + Cập nhật res = max(Res, A+B); Cách 3: ĐPT O(n) - Gọi l[i] = max(s[1], s[2], , s[i]); i = n, với l[0] = 0; - Gọi r[i]=max(r[i+1],s[i]); i = n 1với r[n+1] = -1e16; - Khi đó: res=max(res,2*l[i-1]-s[i-1]+2*r[i]-s[i-1]-s[n]); i = n Câu (7 điểm) Xây cầu - Nếu nhà người i công ty người i thuộc vùng (Pi = Qi) người khơng cần qua cầu, tính khoảng cách người Res + = abs(S[i] – T[i]) với P[i] = Q[i] - Ta xét người i cần qua cầ (P[i] ≠ Q[i]), giả sử có m người cần qua cầu, thêm m đơn vị đề m người qua cầu Res += m; Trường hợp K = Cách 1: ĐPT O(2*n2) Giả sử có m (m ≤ n) người cần qua cầu, ta có 2*m vị trí xây cầu (có thể có vị trí trùng nhau) Lần lượt thử 2*m vị trí xây cầu, với vị trí ta tính khoảng cách n người qua cầu so sánh với phương án tối ưu kết ans Kết toán: Res + ans Cách 2: ĐPT O(nlog(n)) Vị trí đặt cầu tối ưu trung vị 2*m vị trí đặt cầu m người cần qua cầu Sắp xếp 2*m vị trí để tìm trung vị Trường hợp K= - Gọi a[i].x, a[i].y vị trí đi, đến người i cần qua cầu Giả sử có m người cần qua cầu Khơng tính tổng qt ta hốn đổi cho a[i].x < a[i].y - Sắp xếp dãy a cho a[i].x+a[i].y tăng dần - Khi tồn vị trí i cho: Đặt cầu thứ để từ người đến người i qua cầu này, từ người thứ i+1 đến người thứ n qua cầu thứ khoảng cách bé - Gọi f[i] = khoảng cách nhỏ để từ nhà đến nhà i qua cầu thứ - Gọi h[i] = khoảng cách nhỏ để từ nhà i đến nhà n qua cầu thứ Kết toán = Res + min(f[i]+h[i+1]) với i = n-1 Cách 1: ĐPT O(n2log(n)) Tính f[i], h[i] giống trường hợp K = Cách 2: ĐPT O(nlog(n)) Cải tiến tính f[i], h[i] sau Giả sử ta cần đặt cầu cho người thứ đến người thứ i qua cầu  ta cần tìm trung vị 2*i vị trí i người Dùng L : chứa i vị trí nhỏ 2*i vị trí i người Dùng R: chứa i vị trí lớn 2*i vị trí i người  Vị trí xây cầu vị trí lớn L vị trí nhỏ R  Khi tổng khoảng cách = Tổng số R – Tổng số L Để tối ưu lấy phần tử nhỏ R, lớn L, Dùng Heapmin để lưu trữ R, dùng Heapmax để lưu trữ L  Khi xét đến người thứ i, ta cần cân hai dãy này, nghĩa phần từ lớn L nhỏ phần tử nhỏ R priority_queue L; //heap max; priority_queue R; //heap min; Tính f[i]: ll sr = 0, sl = 0; for(int i=1; iR.top()){ ll u = L.top(), v = R.top(); sl = sl + v - u; sr = sr + u - v; L.pop(); R.pop(); L.push(v); R.push(u); } f[i] = sr - sl; } Tương tự tính cho h[i] HẾT -Người đề: Lê Thị Thu Vân - SĐT: 0905711082 - email: lethithuvanlk@gmail.com ... lượt thử 2*m vị trí xây cầu, với vị trí ta tính khoảng cách n người qua cầu so sánh với phương án tối ưu kết ans Kết toán: Res + ans Cách 2: ĐPT O(nlog(n)) Vị trí đặt cầu tối ưu trung vị 2*m vị trí... nhà đến nhà i qua cầu thứ - Gọi h[i] = khoảng cách nhỏ để từ nhà i đến nhà n qua cầu thứ Kết toán = Res + min(f[i]+h[i+1]) với i = n-1 Cách 1: ĐPT O(n2log(n)) Tính f[i], h[i] giống trường hợp

Ngày đăng: 20/10/2022, 23:32

w