Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water

Posted winfor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water相关的知识,希望对你有一定的参考价值。

题意:给一个杯子 可以倒热水h 和冷水c 必须热冷热冷这样倒,可以倒无限次

问至少倒多少次的时候 温度的总和/倒的次数 最接近给的温度t

题目链接:https://codeforces.ml/contest/1359/problem/C

思路:设出函数考虑单调性 再考虑二分

1 假设倒了x杯热水的时候,冷水也倒了x杯

那么f(x)=(c*x+h*x)/(2*x)  则f(x)=(c+h)/2

所以倒了倒了偶数次的时候温度恒为 (c+h)/2

2.假设冷水倒了x-1杯的时候

那么f(x)=(c*(x-1)+h*x)(x*2-1) 运用求导知识 可以得 导函数为 (c-h)/(2*x-1)^2 可知恒小于0

所以单调递减  把1和正无穷带入函数 可知值域为((c+h)/2,h]

那么就可以利用二分 找到第一个小于t的x

然后再比较一下最后一个大于t的数 也就是x-1 两者谁更接近t 

不要忘记此时的答案是x  那么总的次数即为 x+x-1 或者是 x-1 +(x-1)-1

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn=2e5+5;
 6 const int mod=1e9+7;
 7 double h,c,t;
 8 double check(double x)
 9 {
10     return (c*(x-1)+h*x)/(2*x-1);
11 }
12 
13 int main()
14 {
15     ios::sync_with_stdio(false);
16     cin.tie(0);
17     int q;
18     cin>>q;
19     while(q--)
20     {
21         cin>>h>>c>>t;
22         if(t<=(c+h)/2)
23         {
24             cout<<2<<
;
25         }
26         else
27         {
28             int l=1,r=1e9;
29             int ans=1;
30             while(l<=r)
31             {
32                 int mid=(l+r)/2;
33                 if(check(mid)>t)
34                 {
35                     l=mid+1;
36                 }
37                 else
38                 {
39                     ans=mid;
40                     r=mid-1;
41                 }
42             }
43             if(abs(t-check(ans-1))<=abs(t-check(ans)))
44             {
45                 cout<<2*(ans-1)-1<<
;
46             }
47             else
48                 cout<<2*ans-1<<
;
49 
50         }
51     }
52 
53 }
View Code

 

以上是关于Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 7 A

Educational Codeforces Round 7

Educational Codeforces Round 90

Educational Codeforces Round 33

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27