Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:tipsIn Reply To:tips Posted by:ragnarok01 at 2013-10-06 22:22:55 package poj; import java.io.*; public class POJ3296 { //let xi be the amount of rain water to be used for i-th rinse and yi be the ratio of the whiskey to the total liquid after i-th rinse, then // // Vw //y1 = ---------------- // x1 + Vw // // y1 * Vr //y2 = ----------------- // x2 + Vr // // . // . // . // // y(n-1) * Vr //yn = ------------------- // xn + Vr // // Vr^(n-1) * Vw // = ----------------------------------- (for i = 2 ... n) // (x1 + Vw) * TT(xi + Vr) // // //since Vr, Vw and n is all constant, we need the denominator be maximal in order to let the yn be minimal, //when each part in denominator is strictly equals each other, the product should be maximal, that is //x1 + Vw = xi + Vr for i = 2 ... n //==> x1 + Vw = (Vb - x1) / (k - 1) + Vr //==> (k - 1) * x1 + (k - 1) * Vw = Vb - x1 + (k - 1) * Vr //==> k * x1 = Vb + (k - 1) * Vr - (k - 1) * Vw public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(System.out, false); while(true){ String[] str = in.readLine().replaceAll("^ +", "").split(" +"); while(str[0].equals("")) str = in.readLine().replaceAll("^ +", "").split(" +"); int k = Integer.parseInt(str[0]); if(k == 0) break; double vb = Double.parseDouble(str[1]), vw = Double.parseDouble(str[2]), vr = Double.parseDouble(str[3]), vc = Double.parseDouble(str[4]); if(vb + vw < vr){ out.println(0); continue; } double x1 = (vb + (k - 1) * vr - (k - 1) * vw) / k, xi = 0, left; if(x1 < 0) x1 = 0; left = vb - (k - 1) * (vc - vr); if(x1 < left) x1 = left; if(x1 + vw > vc) x1 = vc - vw; if(x1 > vb) x1 = vb; if(k > 1){ xi = (vb - x1) / (k - 1); if(xi + vr > vc) xi = vc - vr; } out.printf("%d %.2f", k, x1); for(int i = 1; i < k; i++) out.printf(" %.2f", xi); out.println(); } out.flush(); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator