P1337 [JSOI2004] 平衡点 / 吊打XXX

原题链接

题解

朝合力方向位移一段距离,并逐渐减小这个位移距离,需要痛苦的调参

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;
}

posted @   纯粹的  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示