目录

题目链接

loj#2076. 「JSOI2016」炸弹攻击

题解

模拟退火

退火时,由于答案比较小,但是温度比较高

所以在算exp时最好把相差的点数乘以一个常数让选取更差的的概率降低

代码

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = gc;
while(c < '0' || c > '9') c =gc;
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc;
return x * f;
}
void print(int x) {
if(x < 0) {
pc('-');
x = -x;
}
if(x >= 10) print(x / 10);
pc(x % 10 + '0');
}
const int maxn = 100007;
int n,m; double R;
double X[maxn],Y[maxn],r[maxn],p[maxn],q[maxn];
double rd() {
return (double) rand() / RAND_MAX;
}
void randpos(double &x,double & y){
x = 2 * R * rd() - R;
y = 2 * R * rd() - R;
}
#define dt 0.998
#define eps 1e-2
double dis(double x,double y,double x1,double y1) {
return std::sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
}
int calc(double x,double y) {
int ret = 0;
double tr = R;
for(int i = 1;i <= n;++ i) {
tr = std::min(tr,dis(X[i],Y[i],x,y) - r[i]);
}
if(r < 0) return 0;
for(int i = 1;i <= m;++ i)
if(dis(x,y,p[i],q[i]) <= tr) ret ++;
return ret;
}
int solve(double x,double y) {
int mx = calc(x,y);
int now = mx;
double T = R;
for(;T > eps;T *= dt) {
double nt = T + 0.1;
double nx = x + (2.0 * nt) * rd() - nt,ny = y + (2 * nt) * rd() - nt;
int nans = calc(nx,ny);
if(nans > mx || exp(1e4 * (nans - now) / T) > rd()) x = nx,y = ny,now = nans;
mx = std::max(mx,now);
}
return mx;
}
int main() {
srand(19991206);
scanf("%d%d%lf",&n,&m,&R);
for(int i = 1;i <= n;++ i)
scanf("%lf%lf%lf",&X[i],&Y[i],&r[i]);
for(int i = 1;i <= m;++ i)
scanf("%lf%lf",p + i,q + i);
int ans = 0 ;
double px,py;
for(int i = 1;i <= 20;++ i) {
randpos(px,py);
ans = std::max(ans,solve(px,py));
}
print(ans);
pc('\n');
}

loj#2076. 「JSOI2016」炸弹攻击 模拟退火的更多相关文章

  1. LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)

    题面 传送门 题解 退火就好了 记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低 话虽如此然而我自己打的退火答案永远是\(0\)- ...

  2. [LOJ 2082] 「JSOI2016」炸弹攻击 2

    [LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\ ...

  3. 【LOJ】#2076. 「JSOI2016」炸弹攻击

    题解 我冷静一下,话说如果去掉建筑和R的限制好像是模拟退火吧 然后开始写模拟退火了,起始点就随机一个敌人作为起始点 没对着数据写了一下获得了70pts,感到美滋滋 然后对着数据卡了很久--发现有个数据 ...

  4. LOJ#2082. 「JSOI2016」炸弹攻击 2(计算几何+双指针)

    题面 传送门 题解 我们枚举一下发射源,并把敌人和激光塔按极角排序,那么一组合法解就是两个极角之差不超过\(\pi\)且中间有敌人的三元组数,预处理一下前缀和然后用双指针就行了 //minamoto ...

  5. loj#2071. 「JSOI2016」最佳团体

    题目链接 loj#2071. 「JSOI2016」最佳团体 题解 树形dp强行01分规 代码 #include<cstdio> #include<cstring> #inclu ...

  6. 【LOJ】#2082. 「JSOI2016」炸弹攻击 2

    题解 想到n3发现思路有点卡住了 对于每个发射塔把激光塔和敌人按照极角排序,对于一个激光塔,和它转角不超过pi的激光塔中间夹的敌人总和就是答案 记录前缀和,用two-Points扫一下就行 代码 #i ...

  7. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  9. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

随机推荐

  1. mysql服务里面没有启动项

    解决:5.0版本:开始->运行->cmd,进到mysql安装的bin目录D:\MySQL\bin>mysqld.exe -installService successfully in ...

  2. jquery插件模式开发和react组件开发之间的异同

    jquery插件模式开发和react组件开发之间的异同

  3. keepalived实现haproxy负载均衡器的高可用

    一.keepalived简介 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于,用来防止单点故障. 二.vrrp协议2.1 vrrp协议简介 在现实的网络环境中,两台需要通信 ...

  4. mysql的日志及利用mysqldump备份及还原

    日志文件:6类       一般查询日志:log,general_log,log_output       慢查询日志:       错误日志       二进制日志       中继日志       ...

  5. WallPaper

    LiveWallPaper 动态壁纸是从Android2.1就开始带有的一个新的特性.它让我们能够将本来毫无生气的静态的手机屏幕背景替换成 从 随着音乐的活力和脉动而跳跃的声线 到 手指抚过能激起阵阵 ...

  6. sklearn.model_selection模块

    后续补代码 sklearn.model_selection模块的几个方法参数

  7. 篮球弹起问题(for循环)

  8. 前端开发必须知道的JS(一) 原型和继承

    原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会讲下闭包,希望对大家有所帮助.若有疑问或不正之处,欢迎提出指正和讨论. 一. 原型与构造函数 Js所有的函数都有一个protot ...

  9. this和super不能同时出现在构造方法中

    package com.bjpowernode.t02inheritance.c09; /* * 使用super调用父类的构造方法 */public class TestSuper02 { publi ...

  10. eclipse中Ruby环境搭建

    用Eclipse学习Watir.Eclipse支持Ruby的插件:RDT(Ruby Development Tools),下载下来试用了一下,感觉还是不错的.第一步:获取RDT,通过以下链接可以获得R ...