TRƯỜNG THPT CHUYÊN KỲ THI HSG CÁC TRƯỜNG THPT CHUYÊN CHU VĂN AN KHU VỰC DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ BÌNH ĐỊNH LẦN THỨ XI, NĂM HỌC 2021-2022 ĐỀ THI ĐỀ XUẤT ĐỀ THI MÔN: TIN HỌC 10 Thời gian 180 phút (không kể thời gian phát đề) Ngày thi: 14/7/2022 HƯỚNG DẪN THUẬT TOÁN Bài Bộ chữ CVA (6.0 điểm) Subtask 1,2: Duyệt với vòng for để đếm ĐPT O(n3) Subtask 3,4: Với giá trị i mà s[i] = 'V', ta xem thử trước i có chữ 'C' (lưu vào biến c), chữ 'A' sau i (lưu vào biến a) Khi đó, số CVA mà chữ V vị trí s[i] a*c, ta cộng dồn vào biến đếm ĐPT O(n) Bài Xếp đội hình (7.0 điểm) Subtask 1: Sinh cách xếp vị trí khác đối chiếu với vị trí ban đầu xem khác biệt vị trí chọn trường hợp Subtask 2: Chỉ có cách xếp: Cách 1: 10101010….10 Cách 2: 01010101….01 So sánh cách với trạng thái ban đầu xem thử trường hợp có số vị trí trùng nhiều (tức đổi chỗ hơn) Subtask 3: Gọi k số chữ số Bài tốn tương đương với tìm xâu nhị phân độ dài n có k chữ số 1, khơng có chữ số gần mà có số vị trí trùng với xâu s ban đầu nhiều Nếu 2k>n khơng có đáp án (viết -1) Trong xâu nhị phân độ dài i, có j kí tự 1, khơng có kí tự cạnh nhau, kí tự cuối t (t=0 1), ta chọn xâu có nhiều vị trí trùng với xâu s[1 i] Gọi F[i][j][t] số vị trí trùng nhiều F[1][0][0] = s[1]='0'; F[1][0][1] = s[1]='1'; Nếu s[i]='0' thì: F[i][j][0]=max(F[i-1][j][0], F[i-1][j][1])+1; F[i][j][1]=F[i-1][j-1][0]; Nếu s[i]='1' thì: F[i][j][0]=max(F[i-1][j][0], F[i-1][j][1]); F[i][j][1]=F[i-1][j-1][0]+1; Nếu F[n][k][1]>F[n][k][0] thì: Lần ngược để tìm xâu kết x; Nếu x[1]='0' T = F[n][k][1]; Nếu x[1] ≠ '0' T = F[n][k][0]; Nếu F[n][k][1] ≤ F[n][k][0] T = F[n][k][0]; Viết (n-T)/2 ĐPT O(n2) Bài Trò chơi (7.0 điểm) Subtask 1: Dùng kĩ thuật DFS Subtask 2: Dùng kĩ thuật BFS Gọi (x,y) trạng thái can có x lít, can có y lít Từ trạng thái (x,y), với lần đong nước, ta chuyển sang trạng thái (0,y), (a, y), (0, x+y) (x+y-b, b) (x,0), (x, b), (x+y, 0) (a, x+y-a); Mảng D[x][y] số bước để đạt đến trạng thái (x,y) D[][]=∞ hết, riêng D[0][0]=0; Đưa (0,0) vào queue Q; Trong Q không rỗng: Lấy trạng thái (x,y) khỏi Q; t = D[x][y]; Nếu x=c y=c x+y=c viết t kết thúc Nếu D[0][y] = ∞ thêm (0,y) vào Q D[0][y]=t+1; Nếu D[a][y] = ∞ thêm (a,y) vào Q D[a][y]=t+1; Nếu x+y ≤ b thì: oNếu D[0][x+y] = ∞ thêm (0,x+y) vào Q D[0][x+y]=t+1; Nếu x+y > b thì: oNếu D [x+y-b] [b] = ∞ thêm (x+y-b,b) vào Q D[x+y-b][b]=t+1; Nếu D[x][0] = ∞ thêm (x,0) vào Q D[x][0]=t+1; Nếu D[x][b] = ∞ thêm (x,b) vào Q D[x][b]=t+1; Nếu x+y ≤ a thì: oNếu D [x+y][0] = ∞ thêm (x+y,0) vào Q D[x+y][0]=t+1; Nếu x+y > a thì: oNếu D[a][x+y-a] = ∞ thêm (a,x+y-a) vào Q D[a][x+y-a] =t+1; Cuối cùng, viết -1 Giáo viên HD: Trần Hữu Nam SĐT: 0969 156 825