当前位置: 代码迷 >> 综合 >> 2018年10月8日训练日记
  详细解决方案

2018年10月8日训练日记

热度:65   发布时间:2023-11-02 20:39:16.0

今晚将之前未整理完的AtCoder的两道题整理完了,CF上的两题仍没有理解透彻,D三分+集合

个人收藏里有今晚的相关题目

#include<bits/stdc++.h>
using namespace std;
#define ld long double
// from_luogu
int n;
int x[300001],y[300001];
ld chk(ld X){ld A=0;for(int i=1;i<=n;i++)A=max(A,((x[i]-X)*(x[i]-X)+(ld)y[i]*y[i])/((ld)2*y[i]));return A;
}int main(){int Mx=0;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",x+i,y+i);if(y[1]<0)for(int i=1;i<=n;i++) y[i]=-y[i];for(int i=1;i<=n;i++)if(y[i]<0)	return puts("-1"),0;ld l=-1.1e7, r=1.1e7, mid1, mid2;for(int i=1;i<=100;i++){mid1=(l+l+r)/3, mid2=(l+r+r)/3;ld a1=chk(mid1), a2=chk(mid2);if(a1>a2) l=mid1;else r=mid2;} printf("%.10lf\n",(double)chk(mid1));return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define ld long double
// from_luogu
int n;
int x[300001],y[300001];
ld chk(ld X){ld A=0;for(int i=1;i<=n;i++)A=max(A,((x[i]-X)*(x[i]-X)+(ld)y[i]*y[i])/((ld)2*y[i]));return A;
}int main(){int Mx=0;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",x+i,y+i);if(y[1]<0)for(int i=1;i<=n;i++) y[i]=-y[i];for(int i=1;i<=n;i++)if(y[i]<0)	return puts("-1"),0;ld l=-1.1e7, r=1.1e7, mid1, mid2;for(int i=1;i<=100;i++){mid1=(l+l+r)/3, mid2=(l+r+r)/3;ld a1=chk(mid1), a2=chk(mid2);if(a1>a2) l=mid1;else r=mid2;} printf("%.10lf\n",(double)chk(mid1));return 0;
}

E题倒是看懂了题,现将大佬的代码放这吧

//D
#include<bits/stdc++.h>
using namespace std;const int maxn = 1e5+100;
int n;struct point{double x,y;
}pp[maxn];double c(double d){double res = 0;for(int i=0;i<n;i++){res = max(res,(pp[i].y*pp[i].y+(pp[i].x-d)*(pp[i].x-d))/2.0/pp[i].y);}return res;
}int main(){scanf("%d",&n);int xx = 0,yy = 0;for(int i=0;i<n;i++){scanf("%lf%lf",&pp[i].x,&pp[i].y);if(pp[i].y<0) xx++;else yy++;pp[i].y = fabs(pp[i].y);}if(xx&&yy){printf("-1\n");return 0;}double ub = 1e7;double lb = -1e7;while(ub-lb>1e-8){double r1 = lb + (ub-lb)/3;double r2 = lb + 2*(ub-lb)/3;if(c(r1)<c(r2))ub = r2;else lb = r1;}printf("%.7f\n",c(lb));return 0;
}

 

  相关解决方案