82分求助
查看原帖
82分求助
147895
破壁人罗辑楼主2021/12/28 10:45

直接模拟

#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分

2021/12/28 10:45
加载中...