首页 > 其他 > 详细

6.1每日一题题解

时间:2020-06-01 18:26:40      阅读:42      评论:0      收藏:0      [点我收藏+]

Linova and Kingdom

涉及知识点:

  • 思维

solution:

  • 首先可以想到温度只有两种状态: 1. 热水和冷水一样多 2.热水比冷水多一杯
  • 首先最简单的情况,如果t比均温小的话最接近的就是均温
  • 否则,我们要看加多少杯热水才能最接近t
  • 假设加了k杯热水,那么温度为\(t_{k} = \frac{(k+1)*h+k*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;
}

6.1每日一题题解

原文:https://www.cnblogs.com/QFNU-ACM/p/13026618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!