SEATST 2026 - Country Ranks
Xem PDFCó \(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:
- Số cặp học sinh phân biệt bắt buộc thuộc cùng một quốc gia.
- 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:
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_ranklà 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:
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:
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:
Do đó lời gọi thứ hai trả về 17.
Với dữ liệu khá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)\) và \((2,3)\). Bốn cặp bắt buộc khác quốc gia là \((0,2)\), \((0,3)\), \((1,2)\) và \((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.
Kỳ thi:
- SEATST 2026 - Ngày 1 (19 Tháng bảy, 2026)
Bình luận