当前位置: 代码迷 >> 综合 >> CF-780B- The Meeting Place Cannot Be Changed
  详细解决方案

CF-780B- The Meeting Place Cannot Be Changed

热度:49   发布时间:2023-12-29 14:56:52.0

http://codeforces.com/problemset/problem/780/B.

x轴上有n个点,给出这些点的坐标和最大速度,点只能左右移动。

问 所有点到某一点时间最小,求到达该点的时间。

 

可以对时间进行二分。若时间长为t,则对某一点pos[i],它能到达的范围为pos[i]-time*speed[i],pos[i]+time*speed[i];对n个点所能达到的区域取并集,并且不断缩小时间。

若对时间t,n个点没有并集,则要增大时间,否则减小时间t。

eps取太小会超时。

#include<bits/stdc++.h>
#define maxn 600005
using namespace std;
const double eps=1e-6;
double pos[maxn],speed[maxn];
int n;
bool flag(double time)
{double left,right,lf,rf;for(int i=1;i<=n;i++){if(i==1){left=pos[i]-time*speed[i];right=pos[i]+time*speed[i];}else{lf=pos[i]-time*speed[i];rf=pos[i]+time*speed[i];if(lf>right||rf<left) return 0;left=max(lf,left);right=min(right,rf);}}return 1;
}int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>pos[i];for(int i=1;i<=n;i++) cin>>speed[i];double l=0,r=1e9;while(r-l>eps){double mid=(l+r)/2;if(flag(mid))r=mid;elsel=mid;}printf("%.12lf\n",r);return 0;}

 

  相关解决方案