classSolution{public:stringminimizeError(vector<string>&prices,inttarget){// A[i] := (costCeil - costFloor, costCeil, costFloor)// The lower the costCeil - costFloor, the cheaper to ceil itvector<tuple<double,double,double>>A;intsumFloored=0;intsumCeiled=0;for(conststring&p:prices){constdoubleprice=stod(p);constintfloored=floor(price);constintceiled=ceil(price);sumFloored+=floored;sumCeiled+=ceiled;constdoublecostFloor=price-static_cast<double>(floored);constdoublecostCeil=static_cast<double>(ceiled)-price;A.emplace_back(costCeil-costFloor,costCeil,costFloor);}if(sumFloored>target||sumCeiled<target)return"-1";sort(begin(A),end(A));doublesumError=0.0;constintnCeiled=target-sumFloored;for(inti=0;i<nCeiled;++i)sumError+=get<1>(A[i]);for(inti=nCeiled;i<A.size();++i)sumError+=get<2>(A[i]);stringstreamss;ss<<std::fixed<<std::setprecision(3)<<sumError;returnss.str();}};
classSolution{publicStringminimizeError(String[]prices,inttarget){// A[i] := (costCeil - costFloor, costCeil, costFloor)// The lower the costCeil - costFloor, the cheaper to ceil itList<double[]>A=newArrayList<>();intsumFloored=0;intsumCeiled=0;for(finalStringp:prices){finaldoubleprice=Double.parseDouble(p);finalintfloored=(int)Math.floor(price);finalintceiled=(int)Math.ceil(price);sumFloored+=floored;sumCeiled+=ceiled;finaldoublecostFloor=price-(double)floored;finaldoublecostCeil=(double)ceiled-price;A.add(newdouble[]{costCeil-costFloor,costCeil,costFloor});}if(sumFloored>target||sumCeiled<target)return"-1";Collections.sort(A,newComparator<double[]>(){@Overridepublicintcompare(double[]a,double[]b){returnDouble.compare(a[0],b[0]);}});doublesumError=0.0;finalintnCeiled=target-sumFloored;for(inti=0;i<nCeiled;++i)sumError+=A.get(i)[1];for(inti=nCeiled;i<A.size();++i)sumError+=A.get(i)[2];returnString.format("%.3f",sumError);}}
classSolution:defminimizeError(self,prices:List[str],target:int)->str:# A[i] := (costCeil - costFloor, costCeil, costFloor)# The lower the costCeil - costFloor, the cheaper to ceil itA=[]sumFloored=0sumCeiled=0forpriceinmap(float,prices):floored=math.floor(price)ceiled=math.ceil(price)sumFloored+=flooredsumCeiled+=ceiledcostFloor=price-flooredcostCeil=ceiled-priceA.append((costCeil-costFloor,costCeil,costFloor))ifnotsumFloored<=target<=sumCeiled:return'-1'A.sort()nCeiled=target-sumFlooredreturn'{:.3f}'.format(sum(a[1]forainA[:nCeiled])+sum(a[2]forainA[nCeiled:]))