题解 | #E#
Experiment Class
https://ac.nowcoder.com/acm/contest/17574/E
E题题解 稍后更新
先放个代码
#include<iostream> #include<cmath> #include<iomanip> using namespace std; signed main(){ double a,b,c,d,x0,y0,x1,y1; cin>>a>>b>>c>>d>>x0>>y0>>x1>>y1; double s1x,s1y,s2x,s2y,t1x,t1y,t2x,t2y; double tanab,tancd,tans,tant; tanab=b/a; tancd=d/c; tans=y0/x0; tant=y1/x1; if((tans>tanab&&tans>tancd)||(tant>tanab&&tant>tancd)||(tans<tanab&&tans<tancd)||(tant<tanab&&tant<tancd)){ if(((tans>tanab&&tans>tancd)||(tans<tanab&&tans<tancd))^((tant>tanab&&tant>tancd)||(tant<tanab&&tant<tancd))){ if(((tans>tanab&&tans>tancd)||(tans<tanab&&tans<tancd))){ if(tans>tanab&&tans>tancd){ if(tanab>tancd){ s2x=((c*c-d*d)*x0+2*c*d*y0)/(c*c+d*d); s2y=((d*d-c*c)*y0+2*c*d*x0)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((s2x-x1)*(s2x-x1)+(s2y-y1)*(s2y-y1)); } else{ s1x=((a*a-b*b)*x0+2*a*b*y0)/(a*a+b*b); s1y=((b*b-a*a)*y0+2*a*b*x0)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((s1x-x1)*(s1x-x1)+(s1y-y1)*(s1y-y1)); } } else{ if(tanab>tancd){ s1x=((a*a-b*b)*x0+2*a*b*y0)/(a*a+b*b); s1y=((b*b-a*a)*y0+2*a*b*x0)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((s1x-x1)*(s1x-x1)+(s1y-y1)*(s1y-y1)); } else{ s2x=((c*c-d*d)*x0+2*c*d*y0)/(c*c+d*d); s2y=((d*d-c*c)*y0+2*c*d*x0)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((s2x-x1)*(s2x-x1)+(s2y-y1)*(s2y-y1)); } } } else{//(((tant>tanab&&tant>tancd)||(tans<tanab&&tans<tancd))){ if(tant>tanab&&tant>tancd){ if(tanab>tancd){ t2x=((c*c-d*d)*x1+2*c*d*y1)/(c*c+d*d); t2y=((d*d-c*c)*y1+2*c*d*x1)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((t2x-x0)*(t2x-x0)+(t2y-y0)*(t2y-y0)); } else{ t1x=((a*a-b*b)*x1+2*a*b*y1)/(a*a+b*b); t1y=((b*b-a*a)*y1+2*a*b*x1)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((t1x-x0)*(t1x-x0)+(t1y-y0)*(t1y-y0)); } } else{ if(tanab>tancd){ t1x=((a*a-b*b)*x1+2*a*b*y1)/(a*a+b*b); t1y=((b*b-a*a)*y1+2*a*b*x1)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((t1x-x0)*(t1x-x0)+(t1y-y0)*(t1y-y0)); } else{ t2x=((c*c-d*d)*x1+2*c*d*y1)/(c*c+d*d); t2y=((d*d-c*c)*y1+2*c*d*x1)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((t2x-x0)*(t2x-x0)+(t2y-y0)*(t2y-y0)); } } } } else{ if((tans>tanab&&tans>tancd)^(tant>tanab&&tant>tancd)){ cout<<fixed<<setprecision(3)<<sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)); } else{ if((tans>tanab&&tans>tancd)&&(tant>tanab&&tant>tancd)){ if(tanab>tancd){ s2x=((c*c-d*d)*x0+2*c*d*y0)/(c*c+d*d); s2y=((d*d-c*c)*y0+2*c*d*x0)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((s2x-x1)*(s2x-x1)+(s2y-y1)*(s2y-y1)); } else{ s1x=((a*a-b*b)*x0+2*a*b*y0)/(a*a+b*b); s1y=((b*b-a*a)*y0+2*a*b*x0)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((s1x-x1)*(s1x-x1)+(s1y-y1)*(s1y-y1)); } } else{ if(tanab>tancd){ s1x=((a*a-b*b)*x0+2*a*b*y0)/(a*a+b*b); s1y=((b*b-a*a)*y0+2*a*b*x0)/(a*a+b*b); cout<<fixed<<setprecision(3)<<sqrt((s1x-x1)*(s1x-x1)+(s1y-y1)*(s1y-y1)); } else{ s2x=((c*c-d*d)*x0+2*c*d*y0)/(c*c+d*d); s2y=((d*d-c*c)*y0+2*c*d*x0)/(c*c+d*d); cout<<fixed<<setprecision(3)<<sqrt((s2x-x1)*(s2x-x1)+(s2y-y1)*(s2y-y1)); } } } } } else{ s1x=((a*a-b*b)*x0+2*a*b*y0)/(a*a+b*b); s1y=((b*b-a*a)*y0+2*a*b*x0)/(a*a+b*b); s2x=((c*c-d*d)*x0+2*c*d*y0)/(c*c+d*d); s2y=((d*d-c*c)*y0+2*c*d*x0)/(c*c+d*d); t1x=((a*a-b*b)*x1+2*a*b*y1)/(a*a+b*b); t1y=((b*b-a*a)*y1+2*a*b*x1)/(a*a+b*b); t2x=((c*c-d*d)*x1+2*c*d*y1)/(c*c+d*d); t2y=((d*d-c*c)*y1+2*c*d*x1)/(c*c+d*d); double l1=sqrt((s1x-t2x)*(s1x-t2x)+(s1y-t2y)*(s1y-t2y)); double l2=sqrt((s2x-t1x)*(s2x-t1x)+(s2y-t1y)*(s2y-t1y)); cout<<fixed<<setprecision(3)<<min(l1,l2); } return EOF+1; }