博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1984 [SDOI2008]烧水问题
阅读量:6305 次
发布时间:2019-06-22

本文共 1031 字,大约阅读时间需要 3 分钟。

这题好生厉害!

如果n再小一点的话,这题是个贪心。我们把烧到过100度的水能进行热传导就进行热传导,一直向后进行。

这种做法是O(n^2)的,显然过不了。
然后注意到,这题肯定有规律嘛!

推导:设沸腾温度为a

则第一杯温度为a,需要加热t1=a
第二杯可以中和的最高温度为a/2,需要加热t2=a/2
第三杯可以中和的最高温度为t3=(a/4+a)/2=5a/8,需要加热t3=3a/8
第四杯可以中和的最高温度为t4=((a/8+5a/8)/2+a)/2=11a/16,需要加热t4=5/16
则t3/t2=3/4=1-1/4, t4/t3=5/6=1-1/6
继续推导得t(n+1)/t(n)=1-1/2n
(其实好难)

#include
#include
#include
#include
#define P 4200using namespace std;int n;double t[50001],ans;int main(){ scanf("%d",&n); double V=1.0/n; /*for(int i=1;i<=n;i++) { ans+=(100.0-t[i])*V*P; printf("-----%lf\n",(100.0-t[i])/100.0); t[i]=100.0; for(int j=i+1;j<=n;j++) { double d=(t[i]-t[j])/2; t[i]-=d,t[j]+=d; } } printf("%.2lf\n",ans);ans=0;*///以上为贪心 double T=1.0; for(int i=1;i<=n;i++) { ans+=T; T=T*(1.0-1.0/(2*i)); } ans*=V*P*100; printf("%.2lf",ans); return 0; }

转载于:https://www.cnblogs.com/dfsac/p/7587840.html

你可能感兴趣的文章
SQL Server 性能调优(性能基线)
查看>>
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
[Java Web]servlet/filter/listener/interceptor区别与联系
查看>>
POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
查看>>
从零开始学MVC3——创建项目
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>