涉及知识点:
solution:
- 首先可以想到温度只有两种状态: 1. 热水和冷水一样多 2.热水比冷水多一杯
- 首先最简单的情况,如果t比均温小的话最接近的就是均温
- 否则,我们要看加多少杯热水才能最接近t
- 假设加了k杯热水,那么温度为(t_{k} = frac{(k+1) cdot h+k cdot c}{2k+1})
- 根据式子可以反推出k的公式为(k = frac{h-t_k}{2t_k-h-c})
- 将(t_k)换做(t)那么我们可以得到一个k,但是实际的k不一定是整数,所以我们要判断它是否要加一
- 所以我们可以将k和k+1的温度做对比取最接近答案的哪个
- 公式分别为(leftvert frac{kcdot(h+c)+h}{2k+1} - t
ightvert) 和 (leftvert frac{(k+1)cdot(h+c)}{2k+3} - t
ightvert)
std:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t -- )
{
int h,c,t;
scanf("%d%d%d",&h,&c,&t);
if(h + c - 2 * t >= 0)
{
puts("2");
}
else
{
ll a = h - t;
ll b = 2*t - c - h;
ll k = (a/b);
if( abs(k*(h+c)+h-t*(2*k+1))*(2*k+3) <= abs((k+1)*(h+c) + h - t*(2*k+3))*(2*k+1) )
{
printf("%lld
",2*k+1);
}
else printf("%lld
",2*k+3);
}
}
return 0;
}