IOI 2025 — Day 1

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 IOI 2025 — Souvenirs 100 (p) 1.0s 1G
2 IOI 2025 — Triple Peaks 100 (p) 3.0s 1G
3 IOI 2025 — World Map 100 (p) 1.0s 1G

1. IOI 2025 — Souvenirs

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Amaru đang đi mua quà lưu niệm tại một cửa hàng ở nước ngoài. Cửa hàng có \(N\) loại quà lưu niệm, và mỗi loại có vô số quà sẵn có.

Mỗi loại quà lưu niệm có một mức giá cố định. Cụ thể, quà lưu niệm loại \(i\) (với \(0 \le i < N\)) có giá \(P[i]\) đồng xu, trong đó \(P[i]\) là một số nguyên dương.

Amaru biết rằng các loại quà lưu niệm đã được sắp xếp theo thứ tự giảm dần theo giá, và các giá đều phân biệt. Cụ thể, \(P[0] > P[1] > \cdots > P[N-1] > 0\). Hơn nữa, anh ấy đã biết được giá trị \(P[0]\). Đáng tiếc là Amaru không có thêm bất kỳ thông tin nào khác về giá của các loại quà.

Để mua quà, Amaru sẽ thực hiện một số giao dịch với người bán. Mỗi giao dịch gồm các bước sau:

  1. Amaru đưa một số (dương) đồng xu cho người bán.
  2. Người bán đặt số đồng xu này thành một đống trên bàn ở phòng phía sau, nơi Amaru không nhìn thấy.
  3. Người bán xét lần lượt từng loại quà lưu niệm \(0, 1, \ldots, N-1\) theo đúng thứ tự đó. Mỗi loại được xét đúng một lần trong mỗi giao dịch.
    • Khi đang xét loại \(i\), nếu số đồng xu hiện có trong đống ít nhất là \(P[i]\), thì:
      • người bán lấy đi \(P[i]\) đồng xu khỏi đống, và
      • đặt một quà lưu niệm loại \(i\) lên bàn.
  4. Người bán trả lại cho Amaru toàn bộ số đồng xu còn lại trong đống và tất cả quà lưu niệm trên bàn.

Lưu ý rằng trên bàn không có đồng xu hay quà lưu niệm nào trước khi mỗi giao dịch bắt đầu.

Nhiệm vụ của bạn là chỉ dẫn cho Amaru thực hiện một số giao dịch sao cho:

  • mỗi giao dịch, anh ấy mua được ít nhất một quà lưu niệm, và
  • tổng cộng anh ấy mua đúng \(i\) quà lưu niệm loại \(i\), với mọi \(i\) thỏa \(0 \le i < N\). Lưu ý rằng điều này có nghĩa là Amaru không được mua quà lưu niệm loại \(0\).

Amaru không cần tối thiểu hóa số giao dịch và có nguồn cung đồng xu không giới hạn.

Đây là bài toán giao tiếp (Communication, được quản lý bằng manager.cpp), tuy về mặt logic nó là một bài tương tác trong cùng tiến trình thông qua các hàm gọi lại (callback).

Chi tiết cài đặt

Bạn cần cài đặt hàm sau trong tệp souvenirs.h:

C++
void buy_souvenirs(int N, long long P0)
  • \(N\): số loại quà lưu niệm.
  • \(P0\): giá trị của \(P[0]\).
  • Hàm này được gọi đúng một lần cho mỗi test.

Bên trong hàm trên, bạn có thể gọi hàm thư viện sau (do trình chấm cung cấp) để chỉ thị cho Amaru thực hiện một giao dịch:

C++
std::pair<std::vector<int>, long long> transaction(long long M)
  • \(M\): số đồng xu mà Amaru đưa cho người bán.
  • Hàm trả về một cặp giá trị. Phần tử thứ nhất là một mảng \(L\) chứa các loại quà lưu niệm đã mua được (theo thứ tự tăng dần). Phần tử thứ hai là một số nguyên \(R\), là số đồng xu còn lại được trả về cho Amaru sau giao dịch.
  • Yêu cầu \(P[0] > M \ge P[N-1]\). Điều kiện \(P[0] > M\) đảm bảo Amaru không mua quà loại \(0\), và \(M \ge P[N-1]\) đảm bảo Amaru mua được ít nhất một quà. Nếu các điều kiện này không được thỏa, lời giải sẽ nhận kết quả Output isn't correct: Invalid argument. Lưu ý rằng khác với \(P[0]\), giá trị \(P[N-1]\) không được cung cấp cho bạn.
  • Hàm này có thể được gọi tối đa \(5000\) lần trong mỗi test.

Hành vi của trình chấm là không thích nghi (not adaptive). Điều đó có nghĩa là dãy giá \(P\) được cố định trước khi buy_souvenirs được gọi.

Ràng buộc

  • \(2 \le N \le 100\)
  • \(1 \le P[i] \le 10^{15}\) với mọi \(i\) thỏa \(0 \le i < N\).
  • \(P[i] > P[i+1]\) với mọi \(i\) thỏa \(0 \le i < N-1\).

Phân nhóm

  • Subtask 1 (4 điểm): \(N = 2\).
  • Subtask 2 (3 điểm): \(P[i] = N - i\) với mọi \(i\) thỏa \(0 \le i < N\).
  • Subtask 3 (14 điểm): \(P[i] \le P[i+1] + 2\) với mọi \(i\) thỏa \(0 \le i < N-1\).
  • Subtask 4 (18 điểm): \(N = 3\).
  • Subtask 5 (28 điểm): \(P[i+1] + P[i+2] \le P[i]\) với mọi \(i\) thỏa \(0 \le i < N-2\), và \(P[i] \le 2 \cdot P[i+1]\) với mọi \(i\) thỏa \(0 \le i < N-1\).
  • Subtask 6 (33 điểm): Không có ràng buộc bổ sung.

Ví dụ

Xét lời gọi sau:

buy_souvenirs(3, 4)

\(N = 3\) loại quà lưu niệm và \(P[0] = 4\). Quan sát rằng chỉ có ba dãy giá \(P\) khả dĩ: \([4, 3, 2]\), \([4, 3, 1]\)\([4, 2, 1]\).

Giả sử buy_souvenirs gọi transaction(2) và lời gọi này trả về \(([2], 1)\), nghĩa là Amaru mua được một quà loại \(2\) và người bán trả lại \(1\) đồng xu. Quan sát điều này cho phép ta suy ra \(P = [4, 3, 1]\), vì:

  • Với \(P = [4, 3, 2]\), transaction(2) sẽ trả về \(([2], 0)\).
  • Với \(P = [4, 2, 1]\), transaction(2) sẽ trả về \(([1], 0)\).

Sau đó, buy_souvenirs có thể gọi transaction(3), trả về \(([1], 0)\), nghĩa là Amaru mua được một quà loại \(1\) và người bán trả lại \(0\) đồng xu. Cho tới đây, anh ấy đã mua được tổng cộng một quà loại \(1\) và một quà loại \(2\).

Cuối cùng, buy_souvenirs có thể gọi transaction(1), trả về \(([2], 0)\), nghĩa là Amaru mua được một quà loại \(2\). Lưu ý rằng ta cũng có thể dùng transaction(2) ở bước này. Tại thời điểm này, Amaru đã có một quà loại \(1\) và hai quà loại \(2\) — đúng theo yêu cầu.

Ví dụ 1

Dữ liệu vào
3
4 3 1
Kết quả ra
0 1 2
Giải thích

Trong test này, \(N = 3\) và dãy giá là \(P = [4, 3, 1]\). Hàm buy_souvenirs(3, 4) được gọi.

Một chuỗi tương tác hợp lệ là:

  • Gọi transaction(2) \(\rightarrow\) trả về \(([2], 1)\) (mua \(1\) quà loại \(2\), dư \(1\) đồng xu).
  • Gọi transaction(3) \(\rightarrow\) trả về \(([1], 0)\) (mua \(1\) quà loại \(1\)).
  • Gọi transaction(1) \(\rightarrow\) trả về \(([2], 0)\) (mua \(1\) quà loại \(2\)).

Tổng cộng Amaru mua được \(0\) quà loại \(0\), \(1\) quà loại \(1\)\(2\) quà loại \(2\), đúng yêu cầu \(Q = [0, 1, 2]\).

Chấm điểm

Trình chấm mẫu (sample grader) đọc dữ liệu vào theo định dạng:

  • Dòng \(1\): \(N\)
  • Dòng \(2\): \(P[0]\ P[1]\ \ldots\ P[N-1]\)

Trình chấm mẫu in ra:

  • Dòng \(1\): \(Q[0]\ Q[1]\ \ldots\ Q[N-1]\)

trong đó \(Q[i]\) là tổng số quà lưu niệm loại \(i\) mà Amaru đã mua được, với mọi \(i\) thỏa \(0 \le i < N\).

2. IOI 2025 — Triple Peaks

Điểm: 100 (p) Thời gian: 3.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Cordillera Oriental là một dãy núi thuộc dãy Andes trải dài qua Bolivia. Dãy núi gồm một dãy \(N\) đỉnh núi, được đánh số từ \(0\) đến \(N - 1\). Độ cao của đỉnh thứ \(i\) (\(0 \le i < N\)) là \(H[i]\), là một số nguyên nằm trong đoạn từ \(1\) đến \(N - 1\).

Với hai đỉnh bất kỳ \(i\)\(j\) thỏa mãn \(0 \le i < j < N\), khoảng cách giữa chúng được định nghĩa là \(d(i, j) = j - i\).

Theo các truyền thuyết Inca cổ xưa, một bộ ba đỉnh núi được gọi là huyền thoại nếu nó có tính chất đặc biệt sau: ba độ cao của ba đỉnh núi trùng khớp với ba khoảng cách đôi một giữa chúng (không kể thứ tự).

Một cách hình thức, bộ ba chỉ số \((i, j, k)\) là huyền thoại nếu:

  • \(0 \le i < j < k < N\), và
  • ba độ cao \((H[i], H[j], H[k])\) trùng khớp với ba khoảng cách đôi một \((d(i, j), d(i, k), d(j, k))\) không kể thứ tự. Ví dụ, với các chỉ số \(0, 1, 2\) thì các khoảng cách đôi một là \((1, 2, 1)\), nên các bộ độ cao \((H[0], H[1], H[2]) = (1, 1, 2)\), \((H[0], H[1], H[2]) = (1, 2, 1)\), và \((H[0], H[1], H[2]) = (2, 1, 1)\) đều khớp, nhưng bộ độ cao \((H[0], H[1], H[2]) = (1, 2, 2)\) thì không khớp.

Bài toán này gồm hai phần, mỗi subtask thuộc về Phần I hoặc Phần II. Bạn có thể giải các subtask theo thứ tự bất kỳ. Đặc biệt, bạn không bắt buộc phải hoàn thành toàn bộ Phần I trước khi làm Phần II.

Phần I

Cho mô tả của dãy núi, nhiệm vụ của bạn là đếm số bộ ba huyền thoại.

Phần II

Nhiệm vụ của bạn là dựng các dãy núi có nhiều bộ ba huyền thoại. Phần này gồm \(6\) subtask chỉ nộp output với chấm điểm từng phần.

Trong mỗi subtask, bạn được cho hai số nguyên dương \(M\)\(K\), và bạn cần dựng một dãy núi có nhiều nhất \(M\) đỉnh. Nếu lời giải của bạn chứa ít nhất \(K\) bộ ba huyền thoại, bạn sẽ nhận được điểm tối đa cho subtask đó. Ngược lại, điểm của bạn sẽ tỉ lệ thuận với số bộ ba huyền thoại trong lời giải.

Lưu ý lời giải của bạn phải tạo thành một dãy núi hợp lệ. Cụ thể, giả sử lời giải có \(N\) đỉnh (\(N\) phải thỏa mãn \(3 \le N \le M\)). Khi đó, độ cao của đỉnh thứ \(i\) (\(0 \le i < N\)), ký hiệu là \(H[i]\), phải là một số nguyên nằm trong đoạn từ \(1\) đến \(N - 1\).

Chi tiết cài đặt

Bạn cần cài đặt hai hàm sau trong file triples.h:

Phần I: Bạn cần cài đặt hàm

C++
long long count_triples(std::vector<int> H)
  • \(H\): mảng độ dài \(N\), biểu diễn độ cao của các đỉnh núi.
  • Hàm này được gọi đúng một lần cho mỗi test.
  • Hàm cần trả về một số nguyên \(T\), là số bộ ba huyền thoại trong dãy núi.

Phần II: Bạn có thể nộp lời giải bằng một trong hai cách: nộp file output hoặc cài đặt hàm sau:

C++
std::vector<int> construct_range(int M, int K)
  • \(M\): số đỉnh tối đa.
  • \(K\): số bộ ba huyền thoại mong muốn.
  • Hàm này được gọi đúng một lần cho mỗi subtask.
  • Hàm cần trả về một mảng \(H\) độ dài \(N\), biểu diễn độ cao các đỉnh núi.

Để nộp bằng file output, hãy tạo và nộp một file văn bản theo định dạng:

N
H[0] H[1] ... H[N-1]

Ràng buộc

  • \(3 \le N \le 200\,000\)
  • \(1 \le H[i] \le N - 1\) với mọi \(i\) thỏa \(0 \le i < N\).

Phân nhóm

Phần I có tổng cộng \(70\) điểm:

  • Subtask 1 (\(8\) điểm): \(N \le 100\).
  • Subtask 2 (\(6\) điểm): \(H[i] \le 10\) với mọi \(i\) thỏa \(0 \le i < N\).
  • Subtask 3 (\(10\) điểm): \(N \le 2000\).
  • Subtask 4 (\(11\) điểm): Các độ cao không giảm. Tức là \(H[i-1] \le H[i]\) với mọi \(i\) thỏa \(1 \le i < N\).
  • Subtask 5 (\(16\) điểm): \(N \le 50\,000\).
  • Subtask 6 (\(19\) điểm): Không có ràng buộc bổ sung.

Phần II có tổng cộng \(30\) điểm. Trong mỗi subtask, các giá trị \(M\)\(K\) là cố định và được cho trong bảng sau:

Subtask Điểm \(M\) \(K\)
7 5 \(20\) \(30\)
8 5 \(500\) \(2\,000\)
9 5 \(5\,000\) \(50\,000\)
10 5 \(30\,000\) \(700\,000\)
11 5 \(100\,000\) \(2\,000\,000\)
12 5 \(200\,000\) \(12\,000\,000\)

Ví dụ

Xét lời gọi sau:

C++
count_triples([4, 1, 4, 3, 2, 6, 1])

\(3\) bộ ba huyền thoại trong dãy núi:

  • Với \((i, j, k) = (1, 3, 4)\), các độ cao \((1, 3, 2)\) khớp với các khoảng cách đôi một \((2, 3, 1)\).
  • Với \((i, j, k) = (2, 3, 6)\), các độ cao \((4, 3, 1)\) khớp với các khoảng cách đôi một \((1, 4, 3)\).
  • Với \((i, j, k) = (3, 4, 6)\), các độ cao \((3, 2, 1)\) khớp với các khoảng cách đôi một \((1, 3, 2)\).

Do đó, hàm cần trả về \(3\).

Lưu ý rằng các chỉ số \((0, 2, 4)\) không tạo thành bộ ba huyền thoại, vì các độ cao \((4, 4, 2)\) không khớp với các khoảng cách đôi một \((2, 4, 2)\).

Trình chấm mẫu dùng chung cho Phần I và Phần II, phân biệt qua dòng đầu tiên của input.

Định dạng input cho Phần I:

1
N
H[0] H[1] ... H[N-1]

Định dạng output cho Phần I:

T

Định dạng input cho Phần II:

2
M K

Định dạng output cho Phần II:

N
H[0] H[1] ... H[N-1]

Lưu ý rằng output của trình chấm mẫu khớp với định dạng yêu cầu cho file output ở Phần II.

Ví dụ 1

Dữ liệu vào
1
7
4 1 4 3 2 6 1
Kết quả ra
3
Giải thích

Đây là Phần I (dòng đầu là \(1\)). Dãy có \(7\) đỉnh với độ cao \((4, 1, 4, 3, 2, 6, 1)\). Có \(3\) bộ ba huyền thoại: \((1, 3, 4)\), \((2, 3, 6)\)\((3, 4, 6)\) (xem giải thích ở phần Example).

Ví dụ 2

Dữ liệu vào
2
20 30
Kết quả ra
20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1
Giải thích

Đây là Phần II (dòng đầu là \(2\)). Cần dựng dãy núi có nhiều nhất \(M = 20\) đỉnh và đạt ít nhất \(K = 30\) bộ ba huyền thoại. Output ví dụ chỉ minh hoạ định dạng — bạn cần thiết kế thuật toán dựng dãy núi đạt số bộ ba huyền thoại càng cao càng tốt.

Chấm điểm

Với mỗi subtask của Phần II, nếu lời giải của bạn không tạo thành một dãy núi hợp lệ, điểm sẽ là \(0\) (báo Output isn't correct trên CMS).

Ngược lại, gọi \(T\) là số bộ ba huyền thoại trong lời giải của bạn. Khi đó, điểm cho subtask đó là:

\[ 5 \cdot \min\left(1, \dfrac{T}{K}\right). \]

3. IOI 2025 — World Map

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Ông Pacha, một nhà khảo cổ học người Bolivia, đã phát hiện một tài liệu cổ gần Tiwanaku mô tả thế giới trong thời kỳ Tiwanaku (300-1000 CN). Vào thời điểm đó, có \(N\) quốc gia, được đánh số từ \(1\) đến \(N\).

Trong tài liệu, có một danh sách gồm \(M\) cặp quốc gia kề nhau khác nhau:

\[ (A[0], B[0]), (A[1], B[1]), \ldots, (A[M-1], B[M-1]). \]

Với mỗi \(i\) (\(0 \leq i < M\)), tài liệu nêu rằng quốc gia \(A[i]\) kề với quốc gia \(B[i]\) và ngược lại. Các cặp quốc gia không có trong danh sách thì không kề nhau.

Ông Pacha muốn tạo một bản đồ thế giới sao cho mọi quan hệ kề nhau giữa các quốc gia đúng như trong thời kỳ Tiwanaku. Để làm việc này, trước hết ông chọn một số nguyên dương \(K\). Sau đó, ông vẽ bản đồ dưới dạng một lưới ô vuông kích thước \(K \times K\), với các hàng được đánh số từ \(0\) đến \(K-1\) (từ trên xuống dưới) và các cột được đánh số từ \(0\) đến \(K-1\) (từ trái sang phải).

Ông muốn tô màu mỗi ô của bản đồ bằng một trong \(N\) màu. Các màu được đánh số từ \(1\) đến \(N\), và quốc gia \(j\) (\(1 \leq j \leq N\)) được biểu diễn bởi màu \(j\). Cách tô màu phải thoả mãn tất cả các điều kiện sau:

  • Với mỗi \(j\) (\(1 \leq j \leq N\)), có ít nhất một ô có màu \(j\).
  • Với mỗi cặp quốc gia kề nhau \((A[i], B[i])\), có ít nhất một cặp ô kề nhau sao cho một ô có màu \(A[i]\) và ô kia có màu \(B[i]\). Hai ô được gọi là kề nhau nếu chúng chia sẻ một cạnh chung.
  • Với mỗi cặp ô kề nhau có màu khác nhau, các quốc gia được biểu diễn bởi hai màu này phải kề nhau trong thời kỳ Tiwanaku.

Ví dụ, nếu \(N = 3\), \(M = 2\) và các cặp quốc gia kề nhau là \((1, 2)\)\((2, 3)\), thì cặp \((1, 3)\) không kề nhau, và bản đồ kích thước \(K = 3\) dưới đây thoả mãn tất cả các điều kiện.

Đặc biệt, một quốc gia không cần phải tạo thành một vùng liên thông trên bản đồ. Trong bản đồ trên, quốc gia \(3\) tạo thành một vùng liên thông, trong khi các quốc gia \(1\)\(2\) tạo thành các vùng không liên thông.

Nhiệm vụ của bạn là giúp ông Pacha chọn giá trị của \(K\) và tạo một bản đồ. Tài liệu đảm bảo rằng tồn tại một bản đồ như vậy. Vì ông Pacha thích bản đồ nhỏ hơn, trong subtask cuối điểm của bạn phụ thuộc vào giá trị của \(K\), và giá trị \(K\) nhỏ hơn có thể cho điểm cao hơn. Tuy nhiên, không yêu cầu tìm giá trị nhỏ nhất có thể của \(K\).

Chi tiết cài đặt

Bạn cần cài đặt hàm sau:

C++
std::vector<std::vector<int>> create_map(int N, int M,
    std::vector<int> A, std::vector<int> B)
  • \(N\): số lượng quốc gia.
  • \(M\): số lượng cặp quốc gia kề nhau.
  • \(A\)\(B\): hai mảng độ dài \(M\) mô tả các quốc gia kề nhau.
  • Hàm này được gọi tối đa \(50\) lần cho mỗi test case.

Hàm trả về một mảng \(C\) biểu diễn bản đồ. Gọi \(K\) là độ dài của \(C\).

  • Mỗi phần tử của \(C\) phải là một mảng độ dài \(K\), chứa các số nguyên trong khoảng từ \(1\) đến \(N\).
  • \(C[i][j]\) là màu của ô tại hàng \(i\) và cột \(j\) (với mỗi \(i\)\(j\) thoả mãn \(0 \leq i, j < K\)).
  • \(K\) phải nhỏ hơn hoặc bằng \(240\).

Ràng buộc

  • \(1 \leq N \leq 40\)
  • \(0 \leq M \leq \frac{N \cdot (N-1)}{2}\)
  • \(1 \leq A[i] < B[i] \leq N\) với mỗi \(i\) thoả mãn \(0 \leq i < M\).
  • Các cặp \((A[0], B[0]), \ldots, (A[M-1], B[M-1])\) là phân biệt.
  • Tồn tại ít nhất một bản đồ thoả mãn tất cả các điều kiện.

Phân nhóm

  • Subtask 1 (\(5\) điểm): \(M = N - 1\), \(A[i] = i + 1\), \(B[i] = i + 2\) với mỗi \(0 \leq i < M\).
  • Subtask 2 (\(10\) điểm): \(M = N - 1\).
  • Subtask 3 (\(7\) điểm): \(M = \frac{N \cdot (N-1)}{2}\).
  • Subtask 4 (\(8\) điểm): Quốc gia \(1\) kề với tất cả các quốc gia khác. Một số cặp quốc gia khác cũng có thể kề nhau.
  • Subtask 5 (\(14\) điểm): \(N \leq 15\).
  • Subtask 6 (\(56\) điểm): Không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Dữ liệu vào
2
3 2
1 2
2 3
4 4
1 2
1 3
2 4
3 4
Kết quả ra
3
3 3 3

2 3 3
2 3 2
1 2 1
7
7 7 7 7 7 7 7

2 1 3 3 4 3 4
2 1 3 3 3 3 3
2 1 1 1 3 4 4
2 2 2 1 3 4 3
1 1 1 2 4 4 4
2 2 1 2 2 4 3
2 2 1 2 2 4 4
Giải thích

Test này gồm hai kịch bản con (hai lần gọi create_map).

Kịch bản 1: create_map(3, 2, [1, 2], [2, 3]). Đây là ví dụ trong phần mô tả đề bài, hàm có thể trả về bản đồ kích thước \(K = 3\):

2 3 3
2 3 2
1 2 1

Kịch bản 2: create_map(4, 4, [1, 1, 2, 3], [2, 3, 4, 4]). Ở đây \(N = 4\), \(M = 4\) và các cặp quốc gia \((1,2)\), \((1,3)\), \((2,4)\), \((3,4)\) là kề nhau. Do đó, các cặp \((1,4)\)\((2,3)\) không kề nhau.

Hàm có thể trả về bản đồ kích thước \(K = 7\) thoả mãn tất cả các điều kiện như trên. Bản đồ có thể nhỏ hơn; ví dụ, hàm có thể trả về bản đồ kích thước \(K = 2\):

3 1
4 2

Lưu ý rằng cả hai bản đồ đều thoả mãn \(K/N \leq 2\).

Chấm điểm

Đây là bài thi dạng hàm (signature-grader). Trình chấm mẫu đọc dữ liệu theo định dạng sau:

Dòng đầu tiên chứa một số nguyên \(T\) - số lượng kịch bản. Tiếp theo là mô tả của \(T\) kịch bản, mỗi kịch bản theo định dạng:

N M
A[0] B[0]
:
A[M-1] B[M-1]

Định dạng đầu ra:

P
Q[0] Q[1] ... Q[P-1]

C[0][0] ... C[0][Q[0]-1]
:
C[P-1][0] ... C[P-1][Q[P-1]-1]

Trong đó, \(P\) là độ dài của mảng \(C\) trả về bởi create_map, và \(Q[i]\) (\(0 \leq i < P\)) là độ dài của \(C[i]\). Lưu ý rằng dòng thứ 3 trong định dạng đầu ra cố ý để trống.

Điểm subtask 6 phụ thuộc vào giá trị \(K\):

  • Nếu bất kỳ bản đồ nào trả về bởi create_map không thoả mãn tất cả các điều kiện, điểm subtask sẽ là \(0\).
  • Ngược lại, gọi \(R\) là giá trị lớn nhất của \(K/N\) trên tất cả các lần gọi create_map. Khi đó, điểm thành phần được tính theo bảng sau:
Giới hạn Điểm
\(6 < R\) \(0\)
\(4 < R \leq 6\) \(14\)
\(3 < R \leq 4\) \(28\)
\(2.5 < R \leq 3\) \(42\)
\(2 < R \leq 2.5\) \(49\)
\(R \leq 2\) \(56\)