trang chủ / bài tập / medclass

Chia lớp theo median

Đề bài

Mô tả

2n học sinh, học sinh thứ i có mức năng lực ai. Các mức năng lực không nhất thiết phải khác nhau.

Ta định nghĩa mức năng lực của một lớp là số median của các mức năng lực của học sinh trong lớp đó. Với một mảng gồm 2k+1 phần tử, median là phần tử ở vị trí thứ k+1 sau khi sắp xếp không giảm.

Bạn cần chia toàn bộ 2n học sinh vào đúng 2 lớp sao cho:

  • Mỗi học sinh thuộc đúng một lớp.
  • Số lượng học sinh trong mỗi lớp là số lẻ (không chia hết cho 2).
  • Số học sinh giữa hai lớp có thể bằng nhau hoặc khác nhau.

Trong tất cả các cách chia hợp lệ, hãy tìm giá trị nhỏ nhất của |m1m2|, trong đó m1m2 là mức năng lực (median) của hai lớp.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t — số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa số nguyên n.
    • Dòng thứ hai chứa 2n số nguyên a1,a2,,a2n — mức năng lực của các học sinh.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra một số nguyên duy nhất — giá trị nhỏ nhất của |m1m2|.

Ràng buộc

  • 1t104
  • 1n105
  • 1ai109
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 105.

Ví dụ

Input Output Giải thích
3
1
1 1
3
6 5 4 1 2 3
5
13 4 20 13 2 5 8 3 17 16
0
1
5
Bộ 1: chỉ có cách chia mỗi lớp một học sinh, chênh lệch |11|=0.
Bộ 2: chia [6,4,2][5,1,3] có median 43, chênh lệch 1.
Bộ 3: chia [3,4,13,13,20][2,5,8,16,17] có median 138, chênh lệch 5.
1
1
1000000000 1000000000
0 Hai học sinh có cùng năng lực nên chênh lệch bằng 0.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0