[Contest20180418]物理竞赛
题意:在一个三维空间中有一个轴,轴上有一个垂直于轴的半径为$R$的凸透镜(光心在轴上)和$n$个点光源,假设每个点光源发出的$1$单位光都刚好覆盖凸透镜,现在有一个半径为$r$的圆形光屏,问光屏最多能接收到多少单位光
首先当光屏与轴垂直且圆心在轴上时才能取到最优解
显然当$r\geq R$时答案是$n$
设光心的坐标为$0$,$n$个点光源的坐标为$x_{1\cdots n}(x_i\lt0)$,成像在$u_{1\cdots n}$处,光屏的坐标为$x(x\geq0)$,考虑每个点光源有多少光照到光屏上
对于第$i$个点光源,如果$x_i=-f$,那么$u_i=+\infty$,光线经过透镜后平行于轴,贡献为$\left(\dfrac rR\right)^2$
如果$x_i\ne-f$,那么$u_i=\dfrac1{\frac1f-\frac1{x_i}}$,贡献为$g_i(x)=\min\left(\left(\dfrac{u_ir}{(u_i-x)R}\right)^2,1\right)$,这玩意儿随$x$变化的图像大概长这样
(青蛙子???)
以所有红点为端点把$x$分段,那么所有$g_i(x)$在每一段的二阶导数都是连续且$\geq0$的,所以$\begin{align*}\sum\limits_{i=1}^ng_i(x)\end{align*}$在每一段都是凹的,也就是说最大值只可能在这些点上取到,直接枚举这些点,计算答案取最大值即可
最后还要和$x=0$的答案取$\max$,因为如果光线发散,光屏越靠近凸透镜答案越大
#include<stdio.h>
typedef double du;
const du eps=1e-7;
int x[1010],n,f,R,r;
du u[1010];
du min(du a,du b){return a<b?a:b;}
du max(du a,du b){return a>b?a:b;}
du abs(du x){return x>0?x:-x;}
du sqr(du x){return x*x;}
du calc(du t){
int i;
du res;
res=0;
for(i=1;i<=n;i++){
if(x[i]==-f)
res+=r*r/du(R*R);
else if(abs(u[i]-t)>eps)
res+=min(sqr(u[i]*r/du((u[i]-t)*R)),1);
else
res+=1.;
}
return res;
}
int main(){
int i;
du ans;
scanf("%d%d%d%d",&n,&f,&R,&r);
if(r>=R){
printf("%d",n);
return 0;
}
for(i=1;i<=n;i++){
scanf("%d",x+i);
if(x[i]!=-f)u[i]=1./(1./du(f)+1./du(x[i]));
}
ans=calc(0);
for(i=1;i<=n;i++){
if(x[i]<-f)ans=max(ans,max(calc(u[i]*(R-r)/du(R)),calc(u[i]*(R+r)/du(R))));
}
printf("%.7lf",ans);
}
[Contest20180418]物理竞赛的更多相关文章
- [Contest20180418]数学竞赛
题意:初始时$x=0$(长度),当$x$为长度时,你可以把$x$变成$\sin^{-1}x,\cos^{-1}x,\tan^{-1}x$之一($x$变为角度),若$x$为角度,你可以把$x$变成$\s ...
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- C语言中.h和.c文件解析(很精彩)
C语言中.h和.c文件解析(很精彩) 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析 ...
- C语言中.h和.c文件解析
整理自C语言中.h和.c文件解析(很精彩) Part.1(林锐<高质量C/C++编程>) 通过头文件来调用库功能.在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的 ...
- PKUSC2016滚粗记
Day0 坐飞机来北京,地铁上接到电话,以为是诈骗电话马上就挂了,然后看了一下是北京的电话,赶脚有点不对...打回去居然是报到处老师的电话..走了几个小时,到勺园和其他学校的神犇合住.TAT,感觉第二 ...
- C语言中头文件和cpp文件解析
务必提前预读这里的内容:http://www.cnblogs.com/stemon/p/3999844.html 回到cpp文件与头文件各写什么内容的话题上: 理论上来说cpp文件与头文件里的内容,只 ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- 1121: [POI2008]激光发射器SZK
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 574 Solved: 475[Submit][Sta ...
随机推荐
- 解决LaTex中插入Visio画图有多余边框的问题
这里的Visio画图是指Visio另存为或导出的PDF格式图片.就目前而言,Visio另存为的EPS格式的图片均可使用PDF格式代替. 问题描述 这里以Visio中画一个矩形为例,如上图所示. 我们为 ...
- HDU 4714 Tree2cycle 找规律
假设最少删除的边的个数为cost,显然,最终答案即为cost+cost+1 (因为删除一条边,就会增加一个链,所以删除cost条边后,就会有cost+1条链,将这cost+1条链连接起来的代价为cos ...
- 201621123034 《Java程序设计》第9周学习总结
作业09-集合与泛型 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答:Map的HashMap中使用嵌套类static class Node<K,V& ...
- 【bzoj3669】[Noi2014]魔法森林 Kruskal+LCT
原文地址:http://www.cnblogs.com/GXZlegend/p/6797748.html 题目描述 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看 ...
- [bzoj4372] 烁烁的游戏 [动态点分治+线段树+容斥原理]
题面 传送门 思路 观察一下题目,要求的是修改"距离点$u$的距离一定的点权值",那这个就不能用传统的dfs序类算法+线段树维护,因为涉及到向父亲回溯的问题 看到和树上距离相关的东 ...
- 洛谷 P3224 [HNOI2012]永无乡 解题报告
P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...
- 乌龟git
相关操作 链接:http://www.cnblogs.com/hbujt/p/5554038.html 避免乌龟每次输入账户密码 链接:http://www.cnblogs.com/bldf/p/60 ...
- JNDI连接数据库的详细步骤 以及简要的c3po数据库连接的配置
第一步在tomcat的context.xml文件中配置数据源:context.xml的路径形式是:D:\Program Files (x86)\apache-tomcat-6.0.44\conf\co ...
- 怎么用tomcat对socket接口的程序进行调试
对socket(套接字)的demo方法大多都是用main方法进行测试的,那如何用tomcat进行测试呢? 这里需要借助一个工具:工具的名字是:Sockettool.exe .下图是该工具的内容.连上监 ...
- Lesson9 some interesting things in C#
1.关键帧动画 1)xml 界面 <Page x:Class="Test.MainPage" xmlns="http://schemas.microsoft.com ...