# Lời giải bài ACM
## Tác giả: Lê Nguyễn Hữu An, T2124
## 1. Tóm tắt đề
Cho $2n$ ($1 \leq n \leq 4.10^5$) bài toán, để giải bài toán thứ $i$ cần $a_{i}$ giây nếu giao cho Tí làm, hoặc cần $b_{i}$ giây nếu giao cho Tèo làm.
Hãy tìm cách phân công các bài toán cho Tí và Tèo, mỗi người làm đúng $n$ bài sao cho tổng thời gian giải cả $2n$ bài là ít nhất.
In ra tổng thời gian ít nhất tìm được.
## 2. Lời giải
Gọi $p_{1}, p_{2}...p_{n}$ là số hiệu các bài toán mà Tí giải, $q_{1}, q_{2}...q_{n}$ là số hiệu các bài toán mà Tèo giải (Điều kiện: $\forall 1 \leq i, j \leq n: 1\leq p_{i}, q_{j} \leq2n$ và $p_{i}\neq q_{j}$).
Khi đó tổng thời gian để giải 2n bài là:
$a_{p_{1}}+a_{p_{2}}+...+a_{p_{n}}+b_{q_{1}}+b_{q_{2}}+...+b_{q_{n}} = \sum_{i=1}^{n}a_{p_{i}} + \sum_{i=1}^{n}b_{q_{i}}$
**Nhận xét:** Ta luôn có $2a_{i} = a_{i} + b_{i} + (a_{i} - b_{i})$ và $2b_{i} = a_{i} + b_{i} - (a_{i} - b_{i}) \hspace{8pt}\forall 1 \leq i \leq n$
Do đó tổng (1) bằng với:
$^1/_2 \sum_{i=1}^{n}\left[a_{p_{i}} + b_{p_{i}} + (a_{p_{i}} - b_{p_{i}})\right]+ \frac{1}{2}\sum_{i=1}^{n}\left[a_{q_{i}} + b_{q_{i}} - (a_{q_{i}} - b_{q_{i}})\right]$
$= \ ^1/_2\left[\sum_{i=1}^{2n} (a_{i} + b_{i}) + \sum_{i=1}^{n}(a_{p_{i}} - b_{p_{i}}) - \sum_{i=1}^{n}(a_{q_{i}} - b_{q_{i}})\right]$
Dễ thấy để đạt được giá trị nhỏ nhất, ta cần phải tối thiểu hóa biểu thức:
\begin{equation}
\sum_{i=1}^{n}(a_{p_{i}} - b_{p_{i})} - \sum_{i=1}^{n}(a_{q_{i}} - b_{q_{i}})
\end{equation}
Có thể chọn p gồm n bài toán sao cho $a_{i}-b_{i}$ là nhỏ nhất, q gồm n bài toán sao cho $a_{i}-b_{i}$ là lớn nhất. Khi đó biểu thức (2) là nhỏ nhất.
Vậy, với mảng $dif: dif_{i}=a_{i}-b_{i}$ đã được sort theo thứ tự không giảm, tổng nhỏ nhất cần tìm là:
$^1/_2\left[\sum_{i=1}^{2n} (a_{i} + b_{i})+\sum_{i=1}^{n} dif_{i}-\sum_{i=n+1}^{2n}dif_{i}\right]$
**Độ phức tạp:** Ta cần sắp xếp một lần sort, do đó độ phức tạp có thể là $O(nlogn)$ $nếu \ dùng \ chia \ nhị \ phân$ hoặc $O(n + max{a})$ $nếu \ dùng \ counting \ sort$.
### Code mẫu: [Link](https://ideone.com/5YpN4T)