https://www.luogu.org/problem/CF2C

题意:在平面上有三个没有公共部分的圆,求平面上一点使得到三个圆的切线的夹角相等。(若没答案满足条件,则不打印

思路:可用模拟退火算法来枚举答案点,可过,然而应该不是正解。先设一个最优解和初始步长,然后以当前步长不断搜索最优解更新答案,若答案不能更新,则步长减半再搜索,直到精度达到要求结束算法。

#include<cstdio>
#include<cmath>
const double EPS=1E-5; //控制精度
struct Point {
double x,y;
double r;
}P[3];
double Get(double x,double y,const Point b) { //求两点之间的距离
return sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
}
double Check(double x,double y) { //估价函数
double t[3],delta[3],ret=0.0; //t为当前视角,delta表示误差值
for(int i=0;i<3;++i)
t[i]=Get(x,y,P[i])/P[i].r;
for(int i=0;i<3;++i) {
delta[i]=t[i]-t[(i+1)%3];
ret+=delta[i]*delta[i];
}
return ret; //返回误差的平方和
}
int main() {
bool mark;
double x=0.0,y=0.0;
for(int i=0;i<3;++i) {
scanf("%lf%lf%lf",&P[i].x,&P[i].y,&P[i].r);
x+=P[i].x/3;
y+=P[i].y/3; //设置近似最优解为三个圆圆心构成的三角形重心
}
for(double t=1.0,delta;t>EPS;) { //初始步长为1
mark=0; //搜索标记
delta=Check(x,y);
if(Check(x+t,y)<delta) { //搜索更优解
x+=t;
mark=1;
}
else if(Check(x-t,y)<delta) {
x-=t;
mark=1;
}
else if(Check(x,y+t)<delta) {
y+=t;
mark=1;
}
else if(Check(x,y-t)<delta) {
y-=t;
mark=1;
}
if(!mark) //搜索不到调整步长
t/=2;
}
if(fabs(Check(x,y))<EPS) //检查
printf("%.5lf %.5lf",x,y);
return 0;
}

cf2c(模拟退火 步长控制的更多相关文章

  1. 4. Scala程序流程控制

    4.1 程序流程控制说明 在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句,顺序控制,粉质控制,循环控制 温馨提示:Scala语言中控制结构和Java语言中的 ...

  2. 【IScroll深入学习】解决IScroll疑难杂症

    前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ...

  3. CMA-ES 算法

    CMA-ES 算法 一.算法介绍 CMA-ES是Covariance Matrix Adaptation Evolutionary Strategies的缩写,中文名称是协方差矩阵自适应进化策略,主要 ...

  4. 【IScroll深入学习】突破移动端黑暗的利器(上)

    前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ...

  5. shell中的循环

    shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...

  6. 排序算法 & 迷宫的深度, 广度优先

    内容提要 1. 我掌握的排序算法的时间复杂度 2. 我掌握的6种排序算法(插入, 冒泡, 选择, 归并, 快速, 希尔) 3. 迷宫的搜索方法(深度优先 + 广度优先) 各种排序的时间复杂度 名称 稳 ...

  7. The Robust Fuzzy C-means

    摘要: 基于FCM的在图像处理方面对噪声敏感的不足,本文通过引入空间模型建立空间模糊C均值聚类提高算法的鲁棒性,在此基础上,结合抑制式对算法进一步优化.最后,给图像加不同程度的噪声,通过MATLAB编 ...

  8. 分布式ID方案有哪些以及各自的优劣势,我们当如何选择

    作者介绍 段同海,就职于达达基础架构团队,主要参与达达分布式ID生成系统,日志采集系统等中间件研发工作. 背景 在分布式系统中,经常需要对大量的数据.消息.http请求等进行唯一标识,例如:在分布式系 ...

  9. python简单入门

    一. 初识python. 1. 认识计算机 CPU(大脑) 3GHZ + 内存(DDR4) + 主板 + 电源(心脏)+ 显示器 + 键盘 +鼠标+ 显卡 + 硬盘 80MB/s 操作系统 windo ...

随机推荐

  1. (3.2)狄泰软件学院C++课程学习剖析三

    对课程前面40课的详细回顾分析(一) 0. int main() { // ① Array t(3,3); //普通模式 // ② Array *t=new Array(3,3); //指针方式 // ...

  2. PS4 Submission

    第一部分是param.sfo文件的设置: 另外,sce_sys目录下的icon0.png文件和pic1.png文件也可以手动修改成自己需要的样式,前者是在游戏中的logo,图片要求是512x512,p ...

  3. Mysql中主键与索引

    摘自: https://www.cnblogs.com/wicub/p/5898286.html 一.什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没 ...

  4. textarea组件

    textarea组件:多行输入框:(文本域) textarea组件属性: value:类型 字符串 输入框的内容 placeholder:类型 字符串 输入框为空时的占位符 placeholder-s ...

  5. CAS-4.2.7接入REST登录认证,移动端、C/S端登录解决方案

    一.发送GET请求获取RSA公钥和JSESSIONID 请求地址:/cas/login,请求类型:GET curl -I http://cas.gfstack.geo:8080/cas/login 返 ...

  6. review star 评论-评分 文本分析

    <!DOCTYPE html> Title 立项背景: 0-突然被限制,无法访问原amazon_asin_reviews_us数据库: 1-原数据库asin类别.厂家信息不明: 2-自然语 ...

  7. CentOS7设置启动模式问题

    参考地址 https://www.linuxidc.com/Linux/2015-12/126356.htm

  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_2_使用泛型的好处

    用一个案例说明使用泛型和不是用泛型的区别 这里的ArrayList没写数据类型,不写就是默认Object 多态的弊端,不能使用子类特有的方法 向下转型,转换为String类型,才能使用length 不 ...

  9. 锐捷网络自动连接python脚本

    1 实现锐捷网络的连接,当断开后自动重连 import os import sys import time ip = 'www.baidu.com' print('开始ping百度') backinf ...

  10. Winform 开源控件库( Sheng.Winform.Controls)

    升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念. 你可以学习到: 如何基于 Con ...