Codeforces 782B The Meeting Place Cannot Be Changed 二分(精度)
2017-03-06 09:11
417 查看
点击打开链接
题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间(相遇位置不一定为整数点) n<=6e4
每个的速度为0~vi 如果在t秒能相遇 在ti<t也可能相遇,二分最小时间,O(n)判断每个人的移动范围是否有交集即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
struct node{
double x,v;
}p
;
int n;
bool check(double t)
{
double a,b;//移动范围
for(int i=0;i<n;i++)
{
double x=p[i].x-p[i].v*t;
double y=p[i].x+p[i].v*t;
if(i==0)
{
a=x;
b=y;
}
else
{
//移动范围无交集
if(a>y||b<x)
return false;
if(a<=x)
a=x;
if(b>=y)
b=y;
}
}
return true;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
scanf("%lf",&p[i].x);
for(int i=0;i<n;i++)
scanf("%lf",&p[i].v);
double l=0,r=1e9,ans=0;
//精度
while(r-l>1e-7)
{
double mid=(l+r)/2.0;
if(check(mid))
{
ans=mid;
r=mid;//注意:r不能赋为mid-1
}
else
l=mid;
}
printf("%.7lf\n",ans);
return 0;
}
题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间(相遇位置不一定为整数点) n<=6e4
每个的速度为0~vi 如果在t秒能相遇 在ti<t也可能相遇,二分最小时间,O(n)判断每个人的移动范围是否有交集即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
struct node{
double x,v;
}p
;
int n;
bool check(double t)
{
double a,b;//移动范围
for(int i=0;i<n;i++)
{
double x=p[i].x-p[i].v*t;
double y=p[i].x+p[i].v*t;
if(i==0)
{
a=x;
b=y;
}
else
{
//移动范围无交集
if(a>y||b<x)
return false;
if(a<=x)
a=x;
if(b>=y)
b=y;
}
}
return true;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
scanf("%lf",&p[i].x);
for(int i=0;i<n;i++)
scanf("%lf",&p[i].v);
double l=0,r=1e9,ans=0;
//精度
while(r-l>1e-7)
{
double mid=(l+r)/2.0;
if(check(mid))
{
ans=mid;
r=mid;//注意:r不能赋为mid-1
}
else
l=mid;
}
printf("%.7lf\n",ans);
return 0;
}
相关文章推荐
- Codeforces 801C Voltage Keepsake 二分+精度
- codeforces 24E (二分答案,精度控制)
- CodeForces 373C Counting Kangaroos is Fun(袋鼠藏口袋,二分)
- CodeForces - 672D Robin Hood (思维二分)
- CodeForces 785C Anton and Fairy Tale【二分答案+思维】
- CodeForces - 567D One-Dimensional Battle Ships (二分)
- POJ1064Cable master(二分, 精度控制)
- Codeforces 590B Chip 'n Dale Rescue Rangers(二分)
- Codeforces 787E Till I Collapse 主席树+二分
- CodeForces 702B Powers of Two(二分)
- Codeforces-231C-To Add or Not to Add(二分搜索)
- CodeForces 626C - Block Towers(二分)
- Codeforces 557C Arthur and Table 【树状数组 + 二分】
- CodeForces - 932D Tree [倍增+二分]
- CodeForces 589F:Gourmet and Banquet(二分+贪心)
- Codeforces 825D 二分贪心
- CodeForces 483B 二分答案
- POJ 3122-Pie(二分+精度)
- 【二分】Codeforces 706B Interesting drink
- Codeforces 165C Another Problem on Strings 【二分】