NC15385. 小马过河
描述
输入描述
第一行一个整数 ,表示 的询问个数。
接下去 行,每行 个实数 ,表示小马家在点 ,河水为直线
输出描述
输出共 行,每行两个实数 , 表示答案垂足点的坐标 。当你的答案与标准输出的误差小于 时,视为答案正确。
示例1
输入:
3 0 1 0 0 1 1 2.13 -6.89 1.78 1.20 -7.73 0.56 3.473 -4.326 -4.851 -0.819 2.467 -2.729
输出:
0.5000000 0.5000000 1.5864392 1.1869738 3.7990750 -3.076672
C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 384K, 提交时间: 2020-07-23 01:31:59
#include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while(t--){ double x1,x2,x3,y1,y2,y3; cin>>x1>>y1>>x2>>y2>>x3>>y3; double k=((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2))/((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); printf("%.7lf %.7lf\n",x2+k*(x3-x2),y2+k*(y3-y2)); } }
C 解法, 执行用时: 4ms, 内存消耗: 348K, 提交时间: 2023-01-10 15:00:17
#include<stdio.h> int main(){ int T; double px,py,ux,uy,vx,vy,x,y,k; scanf("%d",&T); while(T--){ scanf("%lf%lf%lf%lf%lf%lf",&px,&py,&ux,&uy,&vx,&vy); k=(uy-vy)/(ux-vx); x=(px+k*py+k*k*vx-k*vy)/(k*k+1); y=k*(x-vx)+vy; printf("%lf %lf\n",x,y); } return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 8ms, 内存消耗: 492K, 提交时间: 2023-03-28 12:04:08
#include<bits/stdc++.h> using namespace std; int T; double px,py,ux,uy,vx,vy; int main(){ cin>>T; while(T--){ cin>>px>>py>>ux>>uy>>vx>>vy; double k=(uy-vy)/(ux-vx); double x=(k*py-k*uy+k*k*ux+px)/(k*k+1); double y=k*(x-ux)+uy; printf("%.7lf %.7lf\n",x,y); } }
Python3 解法, 执行用时: 85ms, 内存消耗: 4636K, 提交时间: 2022-11-14 17:40:08
T=int(input()) for i in range(T): a,b,c,d,e,f=map(eval,input().split()) k1=(f-d)/(e-c) m=f-(k1*e) x=((b*k1)-(k1*m)+a)/(1+pow(k1,2)) y=(k1*x)+m print('%.7f'%x,end=' ') print('%.7f'%y)