一名苦逼的OIer,想成为ACMer

Iowa_Battleship

洛谷1984 [SDOI2008]烧水问题

一道找规律

原题链接

显然要将烧得的温度最大化利用,即每次都去热传递。
设水沸腾为\(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;
}

posted on 2018-09-09 19:23  Iowa_Battleship  阅读(146)  评论(0编辑  收藏  举报

导航