• 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的温度做对比取最接近答案的哪个
    • 公式分别为(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;
    }
    
  • 相关阅读:
    解题:NOI 2007 社交网络
    解题:2018九省联考 一双木棋
    125. 背包问题 II
    152. 组合
    140. 快速幂
    148. 颜色分类
    144. 交错正负数
    83. 落单的数 II
    124. 最长连续序列
    59. 最接近的三数之和
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/13026618.html
Copyright © 2020-2023  润新知