zoukankan      html  css  js  c++  java
  • 【BZOJ3680】吊打XXX(模拟退火)

    【BZOJ3680】吊打XXX(模拟退火)

    题面

    BZOJ

    题解

    模拟退火。。。
    就是模拟退火
    然后这题有毒
    各种调参数之后终于(AC)了。。
    这种题就是玄学呀。。。
    温度要调大
    最后跑完还要向四周多(rand)几次
    保证能够找到最优解。。。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    #include<ctime>
    using namespace std;
    #define ll long long
    #define RG register
    #define MAX 20000
    #define sqr(x) ((x)*(x))
    inline int read()
    {
        RG int x=0,t=1;RG char ch=getchar();
        while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
        if(ch=='-')t=-1,ch=getchar();
        while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
        return x*t;
    }
    struct Node{double x,y,w;}p[MAX],ans;
    double mm=1e100;
    int n;
    double Dis(Node a,Node b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
    double Calc(Node P)
    {
        double ret=0;
        for(int i=1;i<=n;++i)ret+=p[i].w*Dis(P,p[i]);
        if(ret<mm)mm=ret,ans=P;
        return ret;
    }
    double Rand(){return rand()%100000/100000.00;}
    void SA(double T)
    {
        Node now=ans;
        while(T>1e-3)
        {
            Node nw;
            nw.x=now.x+T*(2*Rand()-1);
            nw.y=now.y+T*(2*Rand()-1);
            double dlt=Calc(now)-Calc(nw);
            if(dlt>1e-9||exp(dlt/T)>Rand())now=nw;
            T*=0.97;
        }
        for(int i=1;i<=1000;++i)
        {
            now.x=ans.x+T*(2*Rand()-1);
            now.y=ans.y+T*(2*Rand()-1);
            Calc(now);
        }
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;++i)ans.x+=p[i].x=read(),ans.y+=p[i].y=read(),p[i].w=read();
        ans.x/=n;ans.y/=n;
        Calc(ans);
        SA(1000);
        printf("%.3lf %.3lf
    ",ans.x,ans.y);
        return 0;
    }
    
    
  • 相关阅读:
    「最小生成树」[HAOI2006]聪明的猴子
    「打表」[Beijing wc2012]算不出的算式
    『看毛片』kmp字符串匹配算法
    「主席树」[Ctsc2018]混合果汁
    Aiiage Camp Day3 B Bipartite
    Aiiage Camp Day2 D domino
    Aiiage Camp Day1 H Littrain wanna be rich
    Aiiage Camp Day1 E Littrain wanna be small
    Aiiage Camp Day1 C Littrain wanna be different
    Aiiage Camp Day1 A Littrain is a loser, in 2018
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8408905.html
Copyright © 2011-2022 走看看