| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2012 - Broadcasting | 100 (p) | 1.0s | 256M |
| 2 | JOI 2012 - Constellation | 100 (p) | 1.0s | 64M |
| 3 | JOI 2012 - Rotate | 100 (p) | 2.0s | 64M |
Quốc gia JOI sắp bắt đầu phát sóng truyền hình. Trong nước có \(N\) ngôi nhà, và cần xây các tháp phát sóng để mọi ngôi nhà đều xem được truyền hình.
Nhà vua quyết định xây đúng \(K\) tháp. Nếu tháp thứ \(i\) được đặt tại tọa độ \((X_i,Y_i)\) và có mức công suất \(E_i\), mọi ngôi nhà cách tháp không quá \(\sqrt{E_i}\) đều nhận được tín hiệu của tháp đó. Khoảng cách giữa hai điểm \((a,b)\) và \((c,d)\) là
Tháp có mức công suất \(E_i\) tiêu thụ \(E_i\) đơn vị năng lượng. Mục tiêu là phủ sóng tất cả các ngôi nhà và làm tổng năng lượng tiêu thụ của \(K\) tháp nhỏ nhất có thể. Được phép xây tháp ngay tại vị trí của một ngôi nhà và đặt nhiều tháp tại cùng một tọa độ.
Đây là bài chỉ nộp kết quả (output-only). Bạn được cung cấp các bộ dữ liệu chứa tọa độ các ngôi nhà và số tháp cần xây. Với mỗi bộ dữ liệu, hãy tạo và nộp kết quả mô tả vị trí, mức công suất của các tháp. Năng lượng tiêu thụ càng ít thì điểm càng cao.
Có \(5\) bộ dữ liệu được cung cấp trong tệp đính kèm của bài toán. Các tệp dữ liệu vào là:
01.txt: \(N=200\), \(K=20\).02.txt: \(N=500\), \(K=10\).03.txt: \(N=500\), \(K=20\).04.txt: \(N=500\), \(K=15\).05.txt: \(N=500\), \(K=30\).Mỗi tệp đầu vào có định dạng:
Không có hai ngôi nhà trùng tọa độ.
Với mỗi bộ dữ liệu, chuẩn bị một kết quả gồm đúng \(K\) dòng. Dòng thứ \(i\) (\(1\le i\le K\)) chứa ba số nguyên \(X_i,Y_i,E_i\) cách nhau bởi dấu cách, mô tả tọa độ và mức công suất của tháp thứ \(i\).
Kết quả hợp lệ phải tuân thủ các giới hạn bên dưới và phủ sóng tất cả các ngôi nhà. Cụ thể, với mỗi ngôi nhà thứ \(j\), phải tồn tại ít nhất một tháp thứ \(i\) sao cho
Nộp kết quả tương ứng với từng bộ dữ liệu đầu vào. Khi nộp, hệ thống kiểm tra kết quả có khớp với định dạng quy định trong phần Dữ liệu ra hay không; phản hồi lúc nộp chỉ là kiểm tra định dạng. Thí sinh không cần nộp chương trình tạo kết quả.
Mỗi bộ dữ liệu có tối đa \(20\) điểm; tổng điểm của \(5\) bộ dữ liệu là \(100\) điểm. Điểm cho từng bộ dữ liệu được tính riêng như sau.
Gọi \(E_0\) là tổng năng lượng tiêu thụ nhỏ nhất trong các kết quả do các thí sinh nộp cho bộ dữ liệu đó. Nếu kết quả của bạn không thỏa mãn các điều kiện của bài toán, bạn nhận \(0\) điểm cho bộ dữ liệu này. Nếu kết quả hợp lệ, gọi tổng năng lượng tiêu thụ của bạn là
Ví dụ 1
10 3
0 300000
500000 800000
700000 200000
100000 500000
400000 900000
200000 1000000
300000 500000
300000 200000
500000 100000
1000000 0
200000 700000 160000000000
300000 300000 90000000000
750000 0 62500000000
JOI rất thích quan sát bầu trời đêm. Gần như mỗi tối, cậu đều ngắm sao và tìm hiểu mỗi ngôi sao thuộc chòm sao nào.
Một tối nọ, JOI phát hiện \(N\) ngôi sao mà cậu chưa từng thấy. Cậu chụp ảnh bầu trời rồi đến thư viện tìm hiểu vào ngày hôm sau. JOI biết rằng tất cả các ngôi sao này đều thuộc một trong hai chòm sao \(A\) và \(B\), đồng thời xác định được chòm sao của một số ngôi sao. Với những ngôi sao còn lại, cậu chưa biết chúng thuộc chòm sao nào.
Có thể coi mỗi ngôi sao là một điểm trên ảnh. Một chòm sao gồm ít nhất một ngôi sao cùng một số đoạn thẳng nối các cặp sao của chòm sao đó, sao cho:
Một ngôi sao đứng riêng cũng được coi là một chòm sao. Không có ba ngôi sao nào thẳng hàng trên ảnh. Mỗi ngôi sao trong \(N\) ngôi sao thuộc đúng một trong hai chòm sao \(A\) và \(B\), và hai chòm sao này không chứa ngôi sao nào khác ngoài \(N\) ngôi sao đã cho.
Hãy tính số cách chọn hai tập hợp sao tạo thành chòm sao \(A\) và chòm sao \(B\), phù hợp với những thông tin đã biết và có thể nối các sao để thỏa mãn các điều kiện trên. Cả hai chòm sao đều phải không rỗng. Chỉ phân biệt các cách theo tập hợp sao của mỗi chòm sao; các cách vẽ đoạn thẳng khác nhau trên cùng hai tập hợp chỉ được tính một lần. In ra phần dư của số cách khi chia cho \(1\,000\,000\,007=10^9+7\).
Đọc từ đầu vào chuẩn:
Giá trị \(C_i\) có ý nghĩa như sau:
In ra trên một dòng phần dư của số cách chọn hai tập hợp sao khi chia cho \(1\,000\,000\,007\). Nếu không có cách nào thỏa mãn, in ra 0.
Ví dụ 1
4
1 1 1
2 1 1
1 2 0
2 2 2
2
Trong hình biểu diễn dữ liệu, điểm đen là sao thuộc chòm \(A\), điểm trắng là sao thuộc chòm \(B\), còn dấu \(\times\) là sao chưa xác định được chòm.
Có hai khả năng: ngôi sao thứ \(3\) thuộc chòm \(A\), hoặc ngôi sao thứ \(3\) thuộc chòm \(B\). Hai hình dưới đây minh họa một cách nối sao cho mỗi khả năng.
Khi ngôi sao thứ \(3\) thuộc chòm \(A\), có nhiều cách vẽ các đoạn thẳng của chòm \(A\), nhưng tất cả đều được tính chung là một cách chọn tập hợp sao. Vì vậy đáp án là \(2\).
Có một bảng gồm \(N\times N\) ô vuông, xếp thành \(N\) hàng và \(N\) cột. Ô ở hàng thứ \(i\) từ trên xuống và cột thứ \(j\) từ trái sang được gọi là ô \((i,j)\). Ban đầu, ô \((i,j)\) chứa ký tự \(A_{ij}\).
Thực hiện lần lượt \(Q\) thao tác. Ở thao tác thứ \(k\), quay vùng vuông gồm \(S_k\times S_k\) ô, có ô trên cùng bên trái là \((I_k,J_k)\), một góc \(90^\circ\) ngược chiều kim đồng hồ.
Hãy xác định và in ra bảng sau khi thực hiện tất cả các thao tác.
Đọc từ đầu vào chuẩn:
In ra đầu ra chuẩn \(N\) dòng mô tả bảng cuối cùng. Dòng thứ \(i\) là một chuỗi dài \(N\), có ký tự thứ \(j\) bằng ký tự trong ô \((i,j)\) sau tất cả các thao tác.
Ví dụ 1
4 1
abcd
efgh
ijkl
mnop
2 2 2
abcd
egkh
ifjl
mnop
Bảng ban đầu là
abcd
efgh
ijkl
mnop
Thao tác duy nhất quay vùng \(2\times2\) có ô trên cùng bên trái là \((2,2)\), tức là vùng
fg
jk
Sau khi quay vùng này \(90^\circ\) ngược chiều kim đồng hồ, ta được bảng
abcd
egkh
ifjl
mnop