zoukankan      html  css  js  c++  java
  • hdu 3932 Groundhog Build Home——模拟退火

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3932

    注意平均值与最远的点距离为0的情况。所以初值设成-1,这样 id 就不会乱。不过设成0也可以。注意判断 pr==0 ,因为有除法。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<ctime>
    #include<cmath>
    #include<cstdlib>
    #define db double
    using namespace std;
    const int N=1005;
    const db dc=0.99,eps=1e-17,INF=2e4;
    int n,nx[N],ny[N],pid;
    db ans,px,py;
    int rdn()
    {
      int ret=0;bool fx=1;char ch=getchar();
      while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}
      while(ch>='0'&&ch<='9') ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();
      return fx?ret:-ret;
    }
    db dis(db x0,db y0,db x1,db y1)
    {
      return sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));
    }
    void SA(db T)
    {
      db x0=px,y0=py,pr=ans;int id=pid;
      while(T>eps)
        {
          pr=0;
          for(int i=1;i<=n;i++)
        {
          db tmp=dis(x0,y0,nx[i],ny[i]);
          if(tmp>pr)pr=tmp,id=i;
        }
          if(pr<ans)ans=pr,pid=id,px=x0,py=y0;
          if(!pr)return;
          x0=x0+(nx[id]-x0)/pr*T; y0=y0+(ny[id]-y0)/pr*T;
          T*=dc;
        }
    }
    int main()
    {
      srand(time(0));
      int tx,ty;
      while(scanf("%d%d%d",&tx,&ty,&n)==3)
        {
          for(int i=1;i<=n;i++)nx[i]=rdn(),ny[i]=rdn(),px+=nx[i],py+=ny[i];
          px/=n; py/=n; ans=INF;
          SA(10000);SA(10000);
          printf("(%.1lf,%.1lf).
    %.1lf
    ",px,py,ans);
        }
      return 0;
    }
  • 相关阅读:
    Title
    Title
    JS淘宝小广告
    JS淘宝浏览商品
    JS隐藏显示图片
    JS图片轮播
    C#连接数据库的方法
    让$(window).scroll()监听事件只执行一次
    axios发delete请求,后台收不到参数;
    .gitignore规则简介
  • 原文地址:https://www.cnblogs.com/Narh/p/9886381.html
Copyright © 2011-2022 走看看