NC231898. 高维碰撞
描述
输入描述
第一行输入一个整数表示有
组测试数据。
对于第组测试数据:
第行输入一个整数
代表维度数。
第行输入两个整数
代表两个星系的半径。
第行输入
个整数
表示第一个星系的坐标。
第行输入
个整数
表示第二个星系的坐标。
第行输入
个整数
表示第一个星系的单位速度。
第行输入
个整数
表示第二个星系的单位速度。
输出描述
若两个星系永不碰撞,则输出 "inf"(不包含引号),否则输出答案的整数部分。
示例1
输入:
1 4 1 1 0 0 0 0 10 10 10 10 0 0 0 0 1 1 1 1
输出:
-11
C++ 解法, 执行用时: 16ms, 内存消耗: 392K, 提交时间: 2022-01-28 15:40:44
#include<bits/stdc++.h> #define N 20 #define err 1e-11 using namespace std; typedef long long ll; ll T,n; double ra,rb,va[N],vb[N],a[N],b[N],A,B,C; int main(){ cin>>T; while(T--){ cin>>n; A=B=C=0.0; cin>>ra>>rb; for(ll i=1;i<=n;i++) cin>>a[i]; for(ll i=1;i<=n;i++) cin>>b[i]; for(ll i=1;i<=n;i++) cin>>va[i]; for(ll i=1;i<=n;i++) cin>>vb[i]; for(ll i=1;i<=n;i++){ A+=(va[i]-vb[i])*(va[i]-vb[i]); C+=(a[i]-b[i])*(a[i]-b[i]); B+=2*(va[i]-vb[i])*(a[i]-b[i]); } C-=(ra+rb)*(ra+rb); double dt=B*B-4*A*C; if(dt+err<0){ cout<<"inf"<<endl; continue; } double ans=(-B-sqrt(dt))/(2.0*A); cout<<ll(ans)<<endl; } return 0; }