[LnOI2019]长脖子鹿省选模拟赛 东京夏日相会
这里来一发需要开毒瘤优化,并且几率很小一遍过的模拟退火题解...
友情提醒:如果你很久很久没有过某一个点,您可以加上特判
可以像 P1337 [JSOI2004]平衡点 / 吊打XXX 那道题目一样
如果不会退火可以拿那道题练手...
个人看来这题和那题差不多,主要区别在get_ans()的函数上面
如何get_ans呢?
(图很垃圾,别介意)
先看这张图:

假设中间的黑点是目前确定的圆心,要get的ans是离这个点最远的圆上的点
那么初中数学老师就会教你:距离=两个圆心的距离+选中圆的半径
像这样:

显然最远的点只要O(n)遍历取最大值就好了
然后套上退火的模板就好了吧
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("inline")
#pragma GCC optimize("Ofast")
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<ctime>
using namespace std;
inline int read(){
int ans=0,f=1; char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
return ans*f;
}
int n;
double x[50005],y[50005],z[50005],ansx,ansy,BR;
double dis(double x,double y,double a,double b){return sqrt((x-a)*(x-a)+(y-b)*(y-b));}
double get(double q,double p){
double ans=0;
for(register int i=1;i<=n;++i)
ans=max(dis(x[i],y[i],q,p)+z[i],ans) ;
return ans;
}
const double delta=0.999;
double ans=1e20,maxn=-54564564;
int lim;
void Fire(){
register double fx=ansx,fy=ansy;
register double t=12180.0;
while(t>1e-14){
register double tx=fx+(rand()*2-RAND_MAX)*t;
register double ty=fy+(rand()*2-RAND_MAX)*t;
register double tans=get(tx,ty);
register double DE=tans-ans;
if(DE<0){
fx=tx;
fy=ty;
ansx=tx;
ansy=ty;
ans=tans;
}else if(exp(-DE/t)*RAND_MAX>rand())
fx=tx,fy=ty;
t*=delta;
if(clock()-BR>=lim){printf("%.7lf %.7lf %.7lf",ansx,ansy,ans);exit(0);}
}
}
int main(){
BR=clock();
srand(unsigned(time(0)));
n=read();
for(register int i=1;i<=n;++i) scanf("%lf%lf%lf",&x[i],&y[i],&z[i]),ansx+=x[i],ansy+=y[i],maxn=max(maxn,z[i]);
ansx/=1.0*n;
ansy/=1.0*n;
lim=(n<=1000||maxn==0)?995:3995;
lim*=1000;
while(1) Fire();
return 0;
}
[LnOI2019]长脖子鹿省选模拟赛 东京夏日相会的更多相关文章
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解
传送门 听说比赛的时候T4T4T4标程锅了??? WTF换我时间我要写T3啊 于是在T4T4T4调半天无果的情况下260pts260pts260pts收场真的是tcltcltcl. T1 快速多项式变 ...
- [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结
t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...
- 洛谷[LnOI2019]长脖子鹿省选模拟赛t1 -> 快速多项式变换
快速多项式 做法:刚拿到此题有点蒙,一开始真没想出来怎么做,于是试着去自己写几个例子. 自己枚举几种情况之后就基本看出来了,其实本题中 n 就是f(m)在m进制下的位数,每项的系数就是f(m)在m进制 ...
- 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)
本片题解设计两种解法 果然是签到题... 因为返回值问题T了好久... 第一眼:搜索大水题? 然后...竟然A了 #include<cstdio> #include<queue> ...
- P5030 长脖子鹿放置 最小割
$ \color{#0066ff}{ 题目描述 }$ 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没有中国象棋"别马腿& ...
- 长脖子鹿放置【洛谷P5030】二分图最大独立集变形题
题目背景 众周所知,在西洋棋中,我们有城堡.骑士.皇后.主教和长脖子鹿. 题目描述 如图所示,西洋棋的“长脖子鹿”,类似于中国象棋的马,但按照“目”字攻击,且没有中国象棋“别马腿”的规则.(因为长脖子 ...
- P5030 长脖子鹿放置
题目背景 众周所知,在西洋棋中,我们有城堡.骑士.皇后.主教和长脖子鹿. 题目描述 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没 ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
随机推荐
- CI框架3.x 之实现前后端分离
一.建立合理的目录结构 admin与home为后台和前台的控制器和模板文件夹 二.定义前后台视图路径常量 在constants.php中添加如下代码: //定义前台视图路径常量 define('HOM ...
- php第十三节课
查询 <?php class DBDA{ public $host = "localhost"; //数据库地址 public $uid = "root" ...
- webAPP 原生APP 对比
Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成,APP应用客户端只需安装应用的框架 ...
- Unity jointmoto
jointmoto是模拟电机的,他的参数包括了最高车速和最大扭矩 扭矩总是正数,而目标车速决定了方向
- C语言指针与指向指针的指针
#include <stdio.h> #include <string.h> int main() { char a[]="hello world"; ch ...
- 从零开始的 webpack4 + vue2.x
新建文件夹 webpack-vue 安装依赖 yarn init //初始化package.json yarn add webpack webpack-cli //添加webpack.webpack- ...
- NLTK学习笔记(七):文本信息提取
目录 实体识别:分块技术 分块语法的构建 树状图 IOB标记 开发和评估分块器 命名实体识别和信息提取 如何构建一个系统,用于从非结构化的文本中提取结构化的信息和数据?哪些方法使用这类行为?哪些语料库 ...
- [加强版] Codeforces 835D Palindromic characteristics (回文自动机、DP)
题目链接: https://codeforces.com/contest/835/problem/D 题意: 一个回文串是\(1\)-回文的,如果一个回文串的左半部分和右半部分一样且都是\(k\)-回 ...
- Myeclipse学习总结(1)——Myeclipse优化配置
作为企业级开发最流行的工具,用Myeclipse开发java web程序无疑是最合适的,java web前端采用jsp来显示,myeclipse默认打开jsp的视图有卡顿的现象,那么如何更改jsp默认 ...
- pam_cracklib.so模块
pam_cracklib.so中有很多参数可以选择,具体配置如下: debug此选为记录Syslog日志. type=safe输入新密码的时候给予的提示. retry=N改变输入密码的次数,默认值是1 ...