Codeforces 832C - Strange Radiation
Posted Wisdom+.+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 832C - Strange Radiation相关的知识,希望对你有一定的参考价值。
思路:二分最短时间。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define pi acos(-1.0) #define pii pair<int,int> #define pil pair<int,long> #define mem(a,b) mamset(a,b,sizeof(a)) const int MOD=1e9+7; const int INF=0x3f3f3f3f; const int N=1e5+5; const double eps=1e-9; int n; double s; struct people { double x,v,t; }a[N]; bool check(double t) { bool flag1=false,flag2=false; double l_l=1e6,l_r=0,r_l=1e6,r_r=0; for(int i=0;i<n;i++) { if(a[i].t==1) { if(a[i].x-(a[i].v+s)*t>0)continue;//如果炸弹放在这个点上都到不了,说明这个人肯定到不了。 flag1=true; if(a[i].x-a[i].v*t<=0)//如果不加速也能到,那说明炸弹放在哪里都可以。 { l_l=0; l_r=1e6; continue; } double X=floor((t*(s*s-a[i].v*a[i].v)+a[i].x*a[i].v)/s); l_r=max(l_r,X);//取并集 l_l=min(l_l,(double)a[i].x); } else if(a[i].t==2) { if(a[i].x+(a[i].v+s)*t<1e6)continue; flag2=true; if(a[i].x+a[i].v*t>=1e6) { r_l=0; r_r=1e6; continue; } double X=ceil((1e6*(s-a[i].v)-t*(s*s-a[i].v*a[i].v)+a[i].x*a[i].v)/s); r_l=min(r_l,X); r_r=max(r_r,(double)a[i].x); } } if(!flag1||!flag2)return false; if(l_l>l_r||r_l>r_r)return false; if(l_r<r_l||r_r<l_l)return false;//取交集 return true; } int main() { scanf("%d%lf",&n,&s); for(int i=0;i<n;i++) scanf("%lf%lf%lf",&a[i].x,&a[i].v,&a[i].t); double l=0,r=1e6+5; double mid=(l+r)/2; while(r-l>=eps) { if(check(mid))r=mid; else l=mid; mid=(l+r)/2; } printf("%.12lf\n",mid); return 0; }
以上是关于Codeforces 832C - Strange Radiation的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 718 AEfim and Strange Grade
codeforces 842D Vitya and Strange Lesson
CodeForces 1380F Strange Addition 题解
CodeForces 842DVitya and Strange Lesson
Codeforces Gym 101138 D. Strange Queries
Codeforces Round #722 (Div. 2)B. Sifid and Strange Subsequen