题解 CF950A 【Left-handers, Right-handers and Ambidexters】
frankchenfu
2018-03-21 21:32:18
我们把这道题目分成两种情况讨论。
## 情况一
如果左撇子和右撇子比例严重失调,也就是说即使所有可以左右手并用的都使用人数较少的那只手(不妨设为左手,也就是$l+a<r$),那么最终的答案一定就是$2(l+a)$,因为惯用右手的人会多出来,最优的方案就是让以左右手并用的都使用左手。
## 情况二
我们假设人数少的还是惯用左手的人,如果不是情况一中提到的,那么就存在$l+a\ge r$。这时,我们先让一部分左右手并用的把人数补齐,使得$l'=r$,那么此时剩下的$a'=a-(r-l)$,这$a'$个人肯定时尽量平均分即可。最后答案就是$2(r+\lfloor\frac{m'}{2}\rfloor)$。由于涉及奇偶性,这里不再对上式化简(其实对于解题来讲已经足够了)。
## 总结与代码
综上所述,当$l\le r$时有$$ans=\begin{cases}2(l+a) , for\ \ l+a<r.\\ 2(r+\lfloor\frac{r-l}{2}\rfloor) , for\ \ l+a\ge r\end{cases}$$
$r<l$时同理,在程序中只需要开始时判断并`swap`一下即可。
```cpp
#include<cstdio>
#include<cstring>
inline void swap(int &x,int &y){
int t=x;x=y;y=t;
}
int main(){
int l,r,m;scanf("%d%d%d",&l,&r,&m);
if(l>r)
swap(l,r);
if(l+m<r){
printf("%d\n",(l+m)<<1);
return 0;
}
m-=(r-l);
l=r;
printf("%d\n",(l+m/2)<<1);
return 0;
}
```