问题标题: 酷町堂:二分

1
0
已解决
程之行
程之行
高级守护
高级守护

买鱼

n只酷町喵要去买鱼,总共有m家商店,一只酷町喵只能选择去一家商店。每个商店的鱼的价格都是不一样的,酷町喵心里有个预估的买鱼预算。如果购买的鱼比预算高或者低都会造成不满意度(不满意度为预算与实际价格的差值的绝对值),现在希望这n只酷町喵的不满意最低。

求思路


1
已采纳
栾峻岩
栾峻岩
初级天翼
初级天翼

这道题虽然没有给数据范围,但一定要用二分做!

输入后要把代表每个商店的售价的数组排个序。(因为二分查找要求是序列严格单调,排序最好为从小到大)。

 

因为要求n个酷町喵最小的不满意度,所以循环表示酷町喵心里预估的买鱼预算的数组寻找最小的不满意度,用一个变量加起来。

二分是用来求:每个预酷町喵心里预估的买鱼预算的最小不满意度,就是求每一个预酷町喵心里预估的买鱼预算在代表每个商店的售价的数组相差最小的一个数。(可以求最后一个小于等于买鱼预算的数,或者是第一个大于买鱼预算的数,代码见2778或2779).

 

有两个数是最接近的,一个是最后一个小于等于买鱼预算的数,还有一个是第一个大于买鱼预算的数,最小的不满意度就是这两个数与买鱼预算差的最小值。

还要特判边界:

if (l==1)
       num+=a[1]-b[i];
else
       num+=min(abs(a[l]-b[i]),abs(a[l-1]-b[i]));

 

0
我要回答