soj 1237. Paint Mix

来源:互联网 发布:mac北京哪里有专柜 编辑:程序博客网 时间:2024/04/28 07:13

题意:

给B加仑的黑色染料(桶装)和W加仑的白色染料(桶装),循环执行下列操作:

取出C杯(1加仑 = 16杯)的黑色染料的桶内的染料加入白色染料的桶内,搅匀;取出C杯的白色染料的桶内的染料加入黑色染料的桶内,搅匀。

问执行了多少次操作之后黑色染料的桶内和白色染料的桶内的染料的 黑白之比 与B/W的比相差不过eps =1e-5?

思路:

设黑色桶内黑色染料占比rb,则黑白之比rb/(1-rb)

设白色桶内黑色染料占比rb,则黑白之比rw/(1-rw)

循环模拟操作。

有一个简单的改进就是,如果黑色染料比白色的更多,那么一定是黑色桶子最先到达 B / W,反之则反之。

#include <cstdio>#define eps 1e-5#define fabs(x) (((x)<0)?(-(x)):((x)))int b, w, c, ans;double rb, rw, tar;int main(){while (scanf("%d %d %d", &b, &w, &c), b||w||c){tar = b*1.0/w;rb = 1; rw = 0;w *= 16; b *= 16;ans = 0;if (w > b){while (fabs(rb/(1-rb)-tar) > eps){rw = (c*rb + w*rw) / (w+c);rb = (c*rw + (b-c)*rb) / b;ans ++;}}else{while (fabs(rw/(1-rw)-tar) > eps){rw = (c*rb + w*rw) / (w+c);rb = (c*rw + (b-c)*rb) / b;ans ++;}}printf("%d\n", ans);}}