SEATST 2026 - Country Ranks

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 2400 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

\(N\) học sinh tham dự SEATST. Mỗi học sinh đại diện cho đúng một quốc gia. Sau kỳ thi, tất cả học sinh đều có số điểm khác nhau.

Prabowo chuẩn bị đăng bảng xếp hạng lên trang web chính thức. Với mỗi học sinh, bảng xếp hạng ghi quốc gia, điểm số, thứ hạng toàn cuộc và thứ hạng trong quốc gia.

  • Thứ hạng toàn cuộc của một học sinh là số học sinh có điểm cao hơn học sinh đó.
  • Thứ hạng trong quốc gia của một học sinh là số học sinh cùng quốc gia có điểm cao hơn học sinh đó.

Ví dụ:

Quốc gia Điểm Hạng toàn cuộc Hạng trong quốc gia
Singapore 574 0 0
Malaysia 483 1 0
Singapore 466 2 1
Indonesia 460 3 0
Singapore 458 4 2
Malaysia 454 5 1
Singapore 448 6 3
Malaysia 440 7 2
Indonesia 438 8 1

Cả hai loại thứ hạng đều bắt đầu từ \(0\) và không bỏ qua giá trị nào, dù xét toàn cuộc hay trong từng quốc gia.

Khi tải bảng xếp hạng lên mạng, Prabowo quên đăng quốc gia và điểm số. Với mỗi học sinh, ta chỉ biết thứ hạng toàn cuộc và thứ hạng trong quốc gia.

Bạn cần tính hai đại lượng:

  1. Số cặp học sinh phân biệt bắt buộc thuộc cùng một quốc gia.
  2. Số cặp học sinh phân biệt bắt buộc thuộc hai quốc gia khác nhau.

Nếu có hai cách gán học sinh vào các quốc gia đều phù hợp với dữ liệu, trong đó một cặp học sinh cùng quốc gia ở cách thứ nhất nhưng khác quốc gia ở cách thứ hai, thì cặp đó không được tính vào đại lượng nào.

Yêu cầu cài đặt

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

C++
long long count_same_country(int N, std::vector<int> country_rank);
long long count_diff_country(int N, std::vector<int> country_rank);
  • \(N\) là số học sinh.
  • country_rank là mảng độ dài \(N\); country_rank[i] là thứ hạng trong quốc gia của học sinh có thứ hạng toàn cuộc \(i\).
  • Hàm thứ nhất trả về số cặp không có thứ tự gồm hai học sinh phân biệt mà trong mọi cách gán phù hợp, hai học sinh thuộc cùng một quốc gia.
  • Hàm thứ hai trả về số cặp không có thứ tự gồm hai học sinh phân biệt mà trong mọi cách gán phù hợp, hai học sinh thuộc hai quốc gia khác nhau.
  • Mỗi hàm được gọi không quá một lần trong một test.

Bài nộp không được cài đặt hàm main và phải khai báo #include "country.h".

Giới hạn

  • \(1\le N\le 1\,000\,000\).
  • Luôn tồn tại ít nhất một cách gán học sinh vào các quốc gia phù hợp với country_rank.

Chấm điểm

Trong 6 phần đầu, trình chấm chỉ gọi count_same_country.

Phần Điểm Giới hạn thêm
1 3 \(N\le 8\)
2 6 country_rank chứa giá trị \(0\) không quá hai lần
3 6 country_rank không chứa giá trị \(2\)
4 3 \(N\le 300\)
5 3 \(N\le 2000\)
6 9 Không có giới hạn thêm

Trong 6 phần cuối, trình chấm chỉ gọi count_diff_country.

Phần Điểm Giới hạn thêm
7 7 \(N\le 8\)
8 14 country_rank chứa giá trị \(0\) không quá hai lần
9 14 country_rank không chứa giá trị \(2\)
10 7 \(N\le 300\)
11 7 \(N\le 2000\)
12 21 Không có giới hạn thêm

Ví dụ

Xét các lời gọi:

C++
count_same_country(9, [0, 0, 1, 0, 2, 1, 3, 2, 1])
count_diff_country(9, [0, 0, 1, 0, 2, 1, 3, 2, 1])

Giả sử các học sinh có hạng toàn cuộc \(0\), \(1\), \(3\) lần lượt đại diện cho Singapore, Malaysia và Indonesia. Khi đó có bốn cách gán phù hợp:

Hạng toàn cuộc Hạng trong quốc gia Cách 1 Cách 2 Cách 3 Cách 4
0 0 Singapore Singapore Singapore Singapore
1 0 Malaysia Malaysia Malaysia Malaysia
2 1 Singapore Singapore Malaysia Malaysia
3 0 Indonesia Indonesia Indonesia Indonesia
4 2 Singapore Singapore Malaysia Malaysia
5 1 Malaysia Indonesia Singapore Indonesia
6 3 Singapore Singapore Malaysia Malaysia
7 2 Malaysia Indonesia Singapore Indonesia
8 1 Indonesia Malaysia Indonesia Singapore

Có đúng bốn cặp bắt buộc cùng quốc gia:

\[ (2,4),\ (2,6),\ (4,6),\ (5,7). \]

Do đó lời gọi thứ nhất trả về 4.

Có đúng 17 cặp bắt buộc khác quốc gia:

\[ \begin{aligned} &(0,1),(0,3),(1,3),(2,3),(2,5),(2,7),(2,8),\\ &(3,4),(3,6),(4,5),(4,7),(4,8),(5,6),(5,8),\\ &(6,7),(6,8),(7,8). \end{aligned} \]

Do đó lời gọi thứ hai trả về 17.

Với dữ liệu khác:

C++
count_same_country(5, [0, 1, 0, 1, 2]) // trả về 2
count_diff_country(5, [0, 1, 0, 1, 2]) // trả về 4

Hai cặp bắt buộc cùng quốc gia là \((0,1)\)\((2,3)\). Bốn cặp bắt buộc khác quốc gia là \((0,2)\), \((0,3)\), \((1,2)\)\((1,3)\).

Trình chấm mẫu

Trình chấm mẫu nhận \(N\), lựa chọn same hoặc diff, rồi mảng country_rank, sau đó gọi hàm tương ứng và in một số nguyên là giá trị trả về.

Nguồn: Southeast Asia Team Selection Test 2026, Ngày 1, bài Country Ranks.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: