莫名感觉CF的架构比牛客不容易上手,总之用起来有点艰难……
贴一个补题吧:
不知为何,GNU C11始终过不了,但是GNU C++ 17就可以……不知哪里出了问题。
点击以显示 ⇲
点击以隐藏 ⇱
#include<stdio.h> #include<math.h> const double pi=acos(-1); int n; double g[15],l[15],k[15]; double Sin(double k) { return (k>0?1:-1)*sqrt((k*k)/(1+(k*k))); } double Cos(double k) { return sqrt(1/(1+(k*k))); } double solve(double k0,double kn) { double c=(k0-kn)/(g[n]-g[0]+g[n-1]-g[1]),rt=0; int i; for(i=1;i<=n;i++) { k[i]=kn+c*(g[n]-g[i-1]+g[n-1]-g[i]); rt+=l[i]*Sin(k[i]); } return rt; } double judge(double k0) { double ll=-pi/2,rr=0,mid; while((rr-ll)>3e-16) { mid=(ll+rr)/2; (solve(tan(k0),tan(mid))>0)?(rr=mid):(ll=mid); } double rt=0; int i; for(i=1;i<=n;i++) { rt+=l[i]*Cos(k[i]); } return rt; } int main() { double L; scanf("%d%lf",&n,&L); int i; for(i=1;i<=n;i++) { scanf("%lf",&l[i]); g[i]=g[i-1]+l[i]; } double ll=0,rr=pi/2,mid; while((rr-ll)>3e-16) { mid=(ll+rr)/2; (judge(mid)<L)?(rr=mid):(ll=mid); } double x=0,y=0; for(i=1;i<n;i++) { x+=l[i]*Cos(k[i]); y+=l[i]*Sin(k[i]); printf("%.10lf %.10lf\n",x,y); } return 0; }