6.1每日一题题解

Linova and Kingdom

涉及知识点:

  • 思维

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的温度做对比取最接近答案的哪个
  • 公式分别为\(\left\vert \frac{k\cdot(h+c)+h}{2k+1} - t\right\vert\)\(\left\vert \frac{(k+1)\cdot(h+c)}{2k+3} - t \right\vert\)

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\n",2*k+1);
            }
            else printf("%lld\n",2*k+3);
        }
    }
    return 0;
}
posted @ 2020-06-01 18:16  QFNU-ACM  阅读(116)  评论(0编辑  收藏  举报