题解
朝合力方向位移一段距离,并逐渐减小这个位移距离,需要痛苦的调参
code
#include<bits/stdc++.h>
using namespace std;
double x=0,y=0;
struct node
{
double x,y,w;
}pos[1005];
int n;
void moves(double len)
{
double fx=0,fy=0;
for(int i=1;i<=n;i++)
{
double F=pos[i].w;
double dis=0.000001+sqrt((pos[i].x-x)*(pos[i].x-x)+(pos[i].y-y)*(pos[i].y-y));//加1e-6是为了避免分母为零
fx+=(pos[i].x-x)/dis*F;//计算x方向上合力
fy+=(pos[i].y-y)/dis*F;//计算y方向上合力
}
x+=len*fx;//朝合力方向移动
y+=len*fy;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>pos[i].x>>pos[i].y>>pos[i].w;
double len=10000;
while(len>0.000001)
{
moves(len);//振幅?模拟?
len*=0.99;
}
printf("%.3lf %.3lf",x,y);
return 0;
}
标签:int,double,XXX,pos,len,吊打,P1337
From: https://www.cnblogs.com/pure4knowledge/p/18118892