直接模拟
#include<bits/stdc++.h>
#define G 6.67408e-11
using namespace std;
int n;
struct plt{
double x,y,z,vx,vy,vz,m;
}p[30];
void fxyz(short i){
double fx=0,fy=0,fz=0;
for(short j=0;j<i;j++){
double d=((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y)+(p[i].z-p[j].z)*(p[i].z-p[j].z)),f=G*p[i].m*p[j].m/pow(d,1.5);
fx+=f*(p[j].x-p[i].x);
fy+=f*(p[j].y-p[i].y);
fz+=f*(p[j].z-p[i].z);
}
for(short j=n-1;j>i;j--){
double d=((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y)+(p[i].z-p[j].z)*(p[i].z-p[j].z)),f=G*p[i].m*p[j].m/pow(d,1.5);
fx+=f*(p[j].x-p[i].x);
fy+=f*(p[j].y-p[i].y);
fz+=f*(p[j].z-p[i].z);
}
p[i].vx+=fx/p[i].m*0.01;
p[i].vy+=fy/p[i].m*0.01;
p[i].vz+=fz/p[i].m*0.01;
}
int main(){
double t;scanf("%d%lf",&n,&t);
for(short i=0;i<n;i++)scanf("%lf%lf%lf%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z,&p[i].m,&p[i].vx,&p[i].vy,&p[i].vz);
while(t>=0){
t-=0.01;
for(short j=0;j<n;j++)fxyz(j);
for(short j=0;j<n;j++){
p[j].x+=0.01*p[j].vx;
p[j].y+=0.01*p[j].vy;
p[j].z+=0.01*p[j].vz;
}
}
for(short i=0;i<n;i++)printf("%.5lf %.5lf %.5lf\n",p[i].x,p[i].y,p[i].z);
return 0;
}
但是一直卡在82分