• BZOJ 3680 吊打XXX


    Description

    gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty。gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了。蒟蒻们将
    n个gty吊在n根绳子上,每根绳子穿过天台的一个洞。这n根绳子有一个公共的绳结x。吊好gty后蒟蒻们发现由于每个gty重力不同,绳
    结x在移动。蒟蒻wangxz脑洞大开的决定计算出x最后停留处的坐标,由于他太弱了决定向你求助。
    不计摩擦,不计能量损失,由于gty足够矮所以不会掉到地上。

    Input

    输入第一行为一个正整数n(1<=n<=10000),表示gty的数目。
    接下来n行,每行三个整数xi,yi,wi,表示第i个gty的横坐标,纵坐标和重力。
    对于20%的数据,gty排列成一条直线。
    对于50%的数据,1<=n<=1000。
    对于100%的数据,1<=n<=10000,-100000<=xi,yi<=100000

    Output

    输出1行两个浮点数(保留到小数点后3位),表示最终x的横、纵坐标。

    Sample Input

    3
    0 0 1
    0 2 1
    1 1 1

    Sample Output

    0.577 1.000

    退火神教

    这道题直接模拟退火,判断是否更优可以这样:

    将所求点u的权值w=∑dist(u,point[i])*point[i].d

    显然,越大的重量离重心越近,这似乎和费马点有关

    当然这道题和[JSOI]平衡点几乎一样,应该可以爬山

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 int n;
     8 double x[10001],y[10001],w[10001],k,xa,ya,xx,yy,fx,fy,d;
     9 int main()
    10 {int i,j,p;
    11     cin>>n;
    12     for (i=1;i<=n;i++)
    13     {
    14         scanf("%lf%lf%lf",&x[i],&y[i],&w[i]);
    15     }
    16     k=100000;
    17     xa=0;ya=0;
    18     while (k>1e-8)
    19      {
    20          xx=xa;yy=ya;
    21      fx=0;fy=0;
    22      for (j=1;j<=n;j++)
    23        {
    24          d=sqrt((xx-x[j])*(xx-x[j])+(yy-y[j])*(yy-y[j]));
    25          if (d) 
    26            {
    27          double dx=x[j]-xx,dy=y[j]-yy;
    28          fx+=dx/d*w[j];fy+=dy/d*w[j];
    29            }
    30             }
    31      xx+=fx*k;yy+=fy*k;
    32      xa=xx;ya=yy;
    33      k*=0.97;
    34      }
    35     printf("%.3lf %.3lf
    ",xa,ya);
    36 }
    View Code爬山
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 struct ZYYS
     8 {
     9   double x,y,d;
    10 }a[10001],ans,now,nxt;
    11 int n;
    12 double T,eps=1e-8;
    13 double Rand()
    14 {
    15   double x=rand()%1000;
    16   return x/1000;
    17 }
    18 double dist(ZYYS u,ZYYS v)
    19 {
    20   return sqrt((u.x-v.x)*(u.x-v.x)+(u.y-v.y)*(u.y-v.y));
    21 }
    22 double cal(ZYYS u)
    23 {int i;
    24   double ret=0;
    25   for (i=1;i<=n;i++)
    26     {
    27       ret+=dist(a[i],u)*a[i].d;
    28     }
    29   if (ans.d>ret) ans=u,ans.d=ret;
    30   return ret;
    31 }
    32 int main()
    33 {int i;
    34   cin>>n;
    35   ans.d=1e15;
    36   for (i=1;i<=n;i++)
    37     {
    38       scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].d);
    39       ans.x+=a[i].x;ans.y+=a[i].y;
    40     }
    41   ans.x/=n;ans.y/=n;
    42   cal(ans);
    43   T=1000000;
    44   now=ans;
    45   while (T>0.001)
    46     {
    47       nxt=now;
    48       nxt.x+=T*(Rand()*2-1);
    49       nxt.y+=T*(Rand()*2-1);
    50       double p=cal(nxt)-cal(now);
    51       if (p<-eps||exp(p/T)<Rand()) now=nxt;
    52       T*=0.97;
    53     }
    54   for (i=1;i<=1000;i++)
    55     {
    56       now.x+=T*(Rand()*2-1);
    57       now.y+=T*(Rand()*2-1);
    58       cal(now);
    59     }
    60   printf("%.3lf %.3lf",ans.x,ans.y);
    61 }
    View Code退火
  • 相关阅读:
    【TS】535- 7个超好用的 TypeScript 新功能
    【学习】一起加入重学 TypeScript 学习小组
    17.5W秒级交易峰值下的混合云弹性架构之路
    微服务架构:spring cloud之服务注册和服务发现
    消息队列服务RabbitMQ 和Kafka对比
    微服务架构:spring cloud简介
    2016 年度码云热门项目排行榜 TOP 10
    Netflix Conductor : 一个微服务的编排器
    Java 9的这一基本功能,你可能从未听过
    使用 Docker 搭建 Java Web 运行环境
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8312787.html
Copyright © 2020-2023  润新知