洛谷1984 [SDOI2008]烧水问题

时间:2022-03-22 11:45:00

一道找规律

原题链接

显然要将烧得的温度最大化利用,即每次都去热传递。

设水沸腾为\(x\)。

第一杯直接烧水,需提高\(x\)。

第二杯先与第一杯进行热传递,这样只需提高\(\dfrac{x}{2}\),是上一杯的\(\dfrac{1}{2}\)倍。此时两杯温度为\(\dfrac{x}{2},x\)。

第三杯先与第一杯进行热传递,再与第二杯进行热传递,需提高\(x-\dfrac{\dfrac{\frac{x}{2}}{2}+x}{2}=\dfrac{3x}{8}\),是上一杯的\(\dfrac{3}{4}\)倍。此时三杯温度为\(\dfrac{x}{4},\dfrac{5x}{8},x\)。

第四杯同理,需提高\(x-\dfrac{\dfrac{\dfrac{\frac{x}{4}}{2}+\dfrac{5x}{8}}{2}+x}{2}=\dfrac{5x}{16}\),是上一杯的\(\dfrac{5}{6}\)倍。

\(\cdots\)

即第\(n\)杯是第\(n-1\)杯的\(\dfrac{2\times(n-1)-1}{2\times(n-1)}\)倍。

其实手算几杯找到规律就好

#include<cstdio>
using namespace std;
int main()
{
int n, i;
double s = 100, la = 100;
scanf("%d", &n);
for (i = 1; i < n; i++)
{
la *= 1.0*((i << 1) - 1) / (i << 1);
s += la;
}
printf("%.2f", 4200 * s / n);
return 0;
}