题意:给出斜率k,三个点abc的位置,求斜率为k,过点c的直线上的任一点p,到点a和点b的距离的最小
思路:运用高中知识点解题,推公式就可以了、再就是判断一下ab点是否在直线的同侧、
感想:好水的数学题。。。
代码:
#include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f; #define mod 1000000007 double AA(double a,double b,double c,double d) { return sqrt((a-c)*(a-c)+(b-d)*(b-d)); } int main() { int t; double x1,x2,x3,y1,y2,y3,x,y,ans,k; scanf("%d",&t); while(t--) { scanf("%lf",&k); scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3); if((k*x1-y1-k*x3+y3)*(k*x2-y2-k*x3+y3)>0) { y=(2*x2*k+y2*k*k-y2-2*k*x3+2*y3)/(k*k+1); x=x2-(y-y2)*k; ans=AA(x1,y1,x,y); } else { ans=AA(x1,y1,x2,y2); } printf("%.2lf\n",ans); } }