暑假补题记4

Problem - H - Codeforces

 

恶心数论

 开个long double 服了

题解:首先我们先确定俩个东西,就是如果热水冷水数量相同那么不管有几瓶温度都不变,因为一直取平均,所以小于h+c/2的情况只能打2;,因为没有更小的了

  然后就是另外一种情况就是热水始终比冷水多1然后我们就行推导然后发现然后多一这种情况数目越大温度越高

所以我们直接求出差不多的x  推导公式

 int x = (T - c) / (2 * T - h - c);

然后枚举前一个点后一个点当前点就行了

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define int long long
#define double long double
using namespace std;
const int N=200+7;



int32_t main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

    int t;
    cin>>t;
    while (t--)
    {
        double h,c,tt;
        cin>>h>>c>>tt;
        if(h+c>=tt*2)
        {
            cout<<2<<endl;
        }
        else
        {
            int x=ceil((tt-h)/((c+h)-2*tt));
            double k=1e9;
            int s=0;
            int d=0;
            //cout<<x<<endl;
            for(int i=max(0ll,x-1);i<=x+1;i++)
            {
                double ans=(i*c+h*(i+1))/(2.0*i+1);
                //cout<<ans<<endl;
                if(abs(ans-tt)<k)
                {
                    k= fabs(ans-tt);
                    s=2*i+1;
                }
            }
            cout<<s<<endl;
        }
    }
    return 0;
}

 

posted @ 2023-08-03 15:11  whatdo+  阅读(2)  评论(0编辑  收藏  举报