1. 程式人生 > 其它 >CF950A Left-handers, Right-handers and Ambidexters 題解

CF950A Left-handers, Right-handers and Ambidexters 題解

CF950A Left-handers, Right-handers and Ambidexters 題解

Content

\(l\) 個人是左撇子,有 \(r\) 個人是右撇子,另外有 \(a\) 個人既慣用左手又慣用右手。現在想組成一個隊伍,要求隊伍中慣用左手的人和慣用右手的人相等,試求出團隊裡面的最大人數。

資料範圍:\(0\leqslant l,r,a\leqslant 100\)

Solution

假設 \(x=\max\{l,r\},y=\min\{l,r\}\),分兩種情況討論:

  1. \(x-y>a\),那麼我們就儘量多的往 \(y\) 裡面加入慣用兩隻手的人,那麼答案就是 \(2(y+a)\)
  2. 否則,我們先往 \(y\) 裡面加人使得人數一樣多,然後剩下的再均分進入兩組即可(當然,如果剩下的 \(a\)
    是奇數,那麼剩下的那一個直接丟棄),答案就是 \(2(x+\left\lfloor\dfrac{a-x+y}{2}\right\rfloor)\)

綜上,答案為 \(\begin{cases}2(y+a)&x-y>a\\2(x+\left\lfloor\dfrac{a-x+y}{2}\right\rfloor)&x-y\leqslant a\end{cases}\)

Code

int l, r, a, ans;

int main() {
	getint(l), getint(r), getint(a);
	writeint(ans = (abs(l - r) > a) ? (min(l, r) + a) * 2 : max(l, r) * 2 + (a - (max(l, r) - min(l, r))) / 2 * 2);
	return 0;
}