| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Truy vấn trên cây | 100 (p) | 4.0s | 512M |
| 2 | Dò mìn | 100 (p) | 2.5s | 512M |
| 3 | Thiết kế vi mạch | 100 (p) | 2.0s | 512M |
Cho một cây gồm \(n\) đỉnh được đánh số từ \(1\) đến \(n\). Với hai đỉnh \(x\) và \(y\) bất kỳ trên cây, gọi \(d(x, y)\) là số cạnh trên đường đi chứa ít cạnh nhất từ \(x\) tới \(y\).
Với mỗi đỉnh \(r\) và cặp đỉnh \((x, y)\) trên cây, ta gọi \(f_r(x, y)\) là đỉnh \(p\) trên cây thỏa mãn:
Dễ thấy rằng, giá trị \(f_r(x, y)\) luôn tồn tại và được xác định duy nhất với định nghĩa trên.
Với một đỉnh \(r\) cho trước, thầy giáo T liệt kê tất cả \(n^2\) bộ ba có dạng \((x, f_r(x, y), y)\) với mọi \(1 \le x, y \le n\). Sau đó, thầy sắp xếp các bộ ba này theo thứ tự từ điển. Nhắc lại, bộ ba \((a_1, a_2, a_3)\) có thứ tự từ điển nhỏ hơn bộ ba \((b_1, b_2, b_3)\) khi và chỉ khi một trong ba điều kiện sau thỏa mãn:
Thầy T đưa ra \(q\) câu đố thuộc một trong hai dạng sau:
1 r x y: Tìm vị trí của bộ ba \((x, f_r(x, y), y)\) trong dãy sau khi sắp xếp theo quy trình trên.2 r k: Tìm bộ ba ở vị trí thứ \(k\) trong dãy sắp xếp ở trên.Bạn hãy giúp bạn A trả lời \(q\) câu đố này nhé.
1 r x y với \(1 \le r, x, y \le n\).2 r k với \(1 \le r, \sqrt{k} \le n\).1, in ra một số nguyên là thứ tự của bộ \((x, f_r(x, y), y)\).2, in ra hai số nguyên \(x\) và \(y\) thể hiện bộ thứ \(k\) là \((x, f_r(x, y), y)\).Test 1
5 2
1 2
1 3
2 4
2 5
1 2 3 4
2 2 13
13
3 4
Với \(r = 2\), các bộ sau khi đã sắp xếp là:
1.2.Bạn sẽ chơi trò dò mìn trên một bảng gồm \(n\) hàng và \(m\) cột. Mỗi bảng có đúng \(k\) ô chứa mìn, nhưng bạn không biết vị trí của chúng.
Bạn có thể mở một ô để nhận thông tin về ô đó:
-1 và số lần trúng mìn của ván tăng thêm \(1\).Mục tiêu là mở tất cả các ô không chứa mìn và hạn chế số lần mở trúng mìn. Bạn không cần mở những ô mà mình đã suy ra là có mìn.
Đây là bài toán sử dụng giao diện hàm. Thí sinh phải thêm dòng sau vào đầu chương trình:
#include "minesweeper.h"
Không viết hàm main. Hãy cài đặt hàm:
void solve(int n, int m, int k, int b, int l);
Máy chấm gọi solve một lần cho mỗi bảng. Các lời gọi diễn ra liên tiếp trong cùng một tiến trình, vì vậy chương trình phải khởi tạo lại trạng thái riêng của từng ván ở đầu hàm. Trong hàm này, bạn có thể gọi:
int open(int x, int y);
Trong đó \((x,y)\) là ô ở hàng \(x\), cột \(y\), được đánh số từ \(0\):
Mỗi lần gọi open trên một ô có mìn đều được tính là một lần trúng mìn, kể cả khi ô đó đã được mở trước đó. Khi solve kết thúc, mọi ô không chứa mìn phải từng được mở ít nhất một lần; nếu không, kết quả của ván không hợp lệ.
Bạn có thể tải mã nguồn mẫu để xem cấu trúc chương trình cần nộp.
Mỗi tệp chấm chứa \(10\) bảng có cùng các tham số \(n,m,k,b,l\). Gọi \(p\) là số lần trúng mìn lớn nhất trong \(10\) ván của tệp đó.
điểm của tệp.
Bộ dữ liệu gồm ba nhóm:
| Nhóm | Trọng số | \(n\) | \(m\) | \(k\) | \(b\) | \(l\) |
|---|---|---|---|---|---|---|
| 1 | \(27\%\) | \(9\) | \(9\) | \(10\) | \(2\) | \(9\) |
| 2 | \(35\%\) | \(16\) | \(16\) | \(40\) | \(4\) | \(15\) |
| 3 | \(38\%\) | \(30\) | \(16\) | \(99\) | \(10\) | \(25\) |
Mỗi nhóm lần lượt gồm \(27\), \(35\) và \(38\) tệp chấm; mỗi tệp chứa \(10\) bảng cố định.
Cho \(n\) điểm phân biệt có tọa độ nguyên trên mặt phẳng. Dữ liệu bảo đảm tồn tại \(k\) đường thẳng song song với nhau, cùng song song với trục \(Ox\) hoặc cùng song song với trục \(Oy\), sao cho mọi điểm đã cho đều nằm trên các đường thẳng này.
Bạn cần dùng các đoạn thẳng ngang hoặc dọc có đầu mút nguyên để nối tất cả các điểm thành một thành phần liên thông. Chi phí của một cấu hình là tổng độ dài Manhattan của các đoạn thẳng được sử dụng. Hãy tìm một cấu hình hợp lệ có chi phí càng nhỏ càng tốt.
Hai điểm được xem là liên thông nếu có thể đi từ điểm này đến điểm kia dọc theo hợp của các đoạn thẳng đã chọn.
Mỗi tệp dữ liệu có định dạng:
Trong bộ dữ liệu hiện tại, \(1 \le n \le 1000\), \(1 \le k \le 5\) và \(0 \le x_i, y_i \le 10^9\).
Đây là bài toán dạng output-only. Tải bộ dữ liệu đầu vào hiện tại. Với mỗi tệp inputs/<tên>.in, hãy tạo tệp kết quả tương ứng tại outputs/<tên>.out và nén thư mục outputs thành tệp ZIP để nộp.
Mỗi tệp kết quả có định dạng:
Cấu hình phải thỏa mãn:
T.Với mỗi tệp dữ liệu, gọi \(J\) là chi phí của đáp án Ban giám khảo và \(C\) là chi phí của kết quả hợp lệ của bạn.
Bộ dữ liệu gồm \(20\) tệp có trọng số bằng nhau:
Test 1
3 3
0 1
1 0
2 2
4
4
0 1 1 1
1 0 1 1
1 1 1 2
1 2 2 2
Bốn đoạn thẳng có tổng độ dài bằng \(4\), nối cả ba điểm và chỉ gặp nhau tại các đầu mút chung.