#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <unordered_map>
using namespace std;
int i_min(int* num,int L){
int tmp=num[0];
for(int a=0;a<L;a++)
tmp=min(tmp,num[a]);
return tmp;
}
int i_max(int* num,int L){
int tmp=num[0];
for(int a=0;a<L;a++)
tmp=max(tmp,num[a]);
return tmp;
}
int main(){
int n;
cin>>n;
int x[10000],y[10000],vx[10000],vy[10000];
for(int i=0;i<n;i++){
cin>>x[i]>>y[i]>>vx[i]>>vy[i];
}
float xa,xb,ya,yb;
float aa,ab,bb;
float t,d;
double min;
int tmp1,tmp2;
tmp1=i_max(x,n)-i_min(x,n);
tmp2=i_max(y,n)-i_min(y,n);
min=float(tmp1*tmp1+tmp2*tmp2);
min=sqrt(min);
for(int i =0;i<n;i++){
for(int j=i+1;j<n;j++){
xa=(float)(x[i]-x[j]);
xb=(float)(vx[i]-vx[j]);
ya=(float)(y[i]-y[j]);
yb=(float)(vy[i]-vy[j]);
aa=xb*xb+yb*yb;
ab=2*(xa*xb+ya*yb);
bb=(xa*xa+ya*ya);
if(aa==0){
t=0;
d=sqrt(bb);
}
else{
t = -ab/(2*aa);
if(t<0)
t=0;
d=aa*t*t+ab*t+bb;
d=sqrt(d);
}
if(d<min)
min=d;
}
}
float ans=(float)t/100;
cout<<ans<<'\t'<<min<<endl;
}
0%
https://www.nowcoder.com/discuss/37869
https://www.nowcoder.com/discuss/37898