C. Mixing Water
一个简单的思维。
因为是一隔一的,所以要么热水多放一个,要么冷水和热水一样多。
设热水与要求的差为cou1,冷水与要求的差为cou2。
所以我们先考虑两种情况:
1,cou1大于cou2,那么肯定是要么只放两个,或者一个热水正好。
2,cou2大于cou1,那么每次加两个就是减小热水和要求的差值,那么减到多少合适呢?这时就要判断一下了,这里也是容易错的地方。因为判断是平均值的差,所以记得转换成double型求平均值。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
// int a[(int)2e6];
signed main()
{int tt;cin >> tt;while (tt--){int h, c, t;cin >> h >> c >> t; //热,冷,需要int res = 1e7;int cnt = 0;int cou1 = h-t;int cou2 = t-c;if (cou1>=cou2){cnt = 2;if (cou1==0) cnt = 1;}else {int cha = cou2-cou1;//每次降低多shaoint num1,num2;// cout<<cou1<<" "<<cou2<<" "<<cha<<endl;if (cou1>=cha) //如果够减{ num1 = cou1%cha;num2 = abs(cha-num1);if ((double)num1/(cou1/cha*2+1)<=(double)num2/((cou1/cha+1)*2+1)) cnt = cou1/cha*2+1;else cnt = (cou1/cha+1)*2+1;}else {if ((double)(cou1)<=(double)(cha-cou1)/3.0) cnt = 1;else cnt = 3;}}cout<<cnt<<endl;}
}