暑假补题记4
恶心数论
开个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; }