响应式网站开发技术,wordpress如何采集电影,校园网站建设的目的,wordpress 图片木马给定两个点#xff0c;原点和p点#xff0c;现在需要从原点走到p点#xff0c;有两个光源#xff0c;a点和b点#xff0c;这两个光源的半径相等#xff0c;我们需要输出最小的半径的数值
代码
#includebits/stdc.h
using namespace std;double dist(double x1,…给定两个点原点和p点现在需要从原点走到p点有两个光源a点和b点这两个光源的半径相等我们需要输出最小的半径的数值
代码
#includebits/stdc.h
using namespace std;double dist(double x1,double y1,double x2,double y2)
{return sqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2));
}int main()
{int t;scanf(%d,t);while(t--){double px,py,ax,ay,bx,by;cinpxpyaxaybxby;double oadist(0,0,ax,ay),obdist(0,0,bx,by);double padist(px,py,ax,ay),pbdist(px,py,bx,by);double r0dist(ax,ay,bx,by)/2;double ans1e9;ansmin(ans,max(oa,pa));ansmin(ans,max(ob,pb));ansmin(ans,max({r0,oa,pb}));ansmin(ans,max({r0,ob,pa}));printf(%.10lf\n,ans);}return 0;
}
赛时没有想清楚
标签是二分查找几何数学
//二分查找就是说分两种情况来进行讨论估计不是这样子理解的...
第一种情况是o,p两个点都在同一个圆内假设o,p这两个点都在a为圆心的圆内需要覆盖o到p的路径取oa,pa的最大值才可以满足条件同时在b圆里面也是同理得到的这两个最大值取一个最小值因为这两个最大值的较大者表示的是放弃比较近的圆选择另一个比较远的圆明显不符合条件所以需要取两个最大值的较小者
第二种情况是o,p两个点不在同一个圆有两种情况相切或者相交考虑o在a圆内p在b圆内只要oapb可以覆盖就可以但是还需要考虑一个条件覆盖之后能不能相交或者相切相交或者相切的条件是半径大于等于ab/2也就是相切时候的半径第二个样例表示的是两个圆相切r0(相切时候半径)oa的情况假设oar0(相切时候半径)表示的就是相交的情况需要覆盖整个路径的话就取r0,oa,pb的最大值o在b圆内p在a圆内也是一样的道理
最后面为什么要取最小值呢弄不太懂为什么取上述所有情况的最小值
考虑到我们的每一种情况取到的都是当前情况的最优解了也就是说对于特定的样例比如说o,p都在a圆内取oa,pa的最大值就是答案需要的半径这个答案需要的半径一定比oa,pb,r0这三个元素的最大值要小很明显pb或者r0是最大的但是oa,pa的最大值比pb(或者r0)要小
#includebits/stdc.h
using namespace std;double dist(double x1,double y1,double x2,double y2)
{return sqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2));
}int main()
{int t;scanf(%d,t);while(t--){double px,py,ax,ay,bx,by;cinpxpyaxaybxby;double oadist(0,0,ax,ay),obdist(0,0,bx,by);double padist(px,py,ax,ay),pbdist(px,py,bx,by);double r0dist(ax,ay,bx,by)/2;double ansmax(oa,pa);ansmin(ans,max(ob,pb));ansmin(ans,max({r0,oa,pb}));ansmin(ans,max({r0,ob,pa}));printf(%.10lf\n,ans);}return 0;
}