bzoj 4852 炸弹攻击

  • 二维平面上的最优解问题,模拟退火是一个较为优秀的近似算法.
  • 此题确定圆心后,便可 \(O(m)\) 算出收益,且最优解附近显然也较优,是连续变化的,可以直接模拟退火.
  • 小技巧:这里不同答案差值比较小,而温度比较高,可以乘上一个常数,降低选取差解的概率,即满足下式时转移.出处.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
int x=0;
bool pos=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
pos=0;
for(;isdigit(ch);ch=getchar())
x=x*10+ch-'0';
return pos?x:-x;
}
struct v2{
double x,y;
v2(double x=0,double y=0):x(x),y(y) {}
v2 operator + (const v2 &rhs) const
{
return v2(x+rhs.x,y+rhs.y);
}
v2 operator / (const double &rhs) const
{
return v2(x/rhs,y/rhs);
}
v2 operator - (const v2 &rhs) const
{
return v2(x-rhs.x,y-rhs.y);
}
double operator * (const v2 &rhs) const
{
return x*rhs.y-y*rhs.x;
}
double modulus()
{
return sqrt(x*x+y*y);
}
};
const int MAXN=1e3+10;
int n,m;
double R;
struct Tur{
double r;
v2 pos;
}tur[MAXN];
v2 enemy[MAXN];
int dcmp(double x)
{
return fabs(x)<=(1e-8)?0:(x>0?1:-1);
}
int calc(v2 centre)
{
double r=R;
for(int i=1;i<=n;++i)
r=min(r,(centre-tur[i].pos).modulus()-tur[i].r);
int res=0;
for(int i=1;i<=m;++i)
if(dcmp((centre-enemy[i]).modulus()-r)<=0)
++res;
return res;
}
double rd()
{
return (double) rand() / RAND_MAX;
}
double randpos(double &x,double &y)
{
x=2*R*rd()-R;
y=2*R*rd()-R;
}
const double dt=0.998;
const double eps=1e-2;
int cnt=0;
int SA(double x,double y)
{
int res=calc(v2(x,y));
int cur=res;
double T=R;
while(T>eps)
{
double nt=T+0.1;
double nx=x+ (2*nt)*rd()-nt,ny=y+(2*nt)*rd()-nt;
int nans=calc(v2(nx,ny));
if(nans>res || exp(1e4*(nans-cur)/T)>rd())
{
x=nx;
y=ny;
cur=nans;
}
res=max(res,cur);
T*=dt;
}
return res;
}
int main()
{
srand(19260817);
scanf("%d%d%lf",&n,&m,&R);
for(int i=1;i<=n;++i)
scanf("%lf%lf%lf",&tur[i].pos.x,&tur[i].pos.y,&tur[i].r);
for(int i=1;i<=m;++i)
scanf("%lf%lf",&enemy[i].x,&enemy[i].y);
int ans=0;
for(int i=1;i<=20;++i)
{
double x,y;
randpos(x,y);
ans=max(ans,SA(x,y));
}
printf("%d\n",ans);
return 0;
}

bzoj 4852 炸弹攻击的更多相关文章

  1. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  2. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  3. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  4. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  5. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  6. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  7. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  8. 【splay】文艺平衡树 BZOJ 3223

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

  9. bzoj 刷水

    bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. #include <iostream> #include <cst ...

随机推荐

  1. shell基本认识

    shell基本认识 bash # echo $BASH /bin/bash 第一个shell脚本first_shell.sh #!/bin/bash echo "Hello world!&q ...

  2. Memcached prepend 命令

    Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 . 语法: prepend 命令的基本语法格式如下: prepend key flags e ...

  3. 使用jquery.jqprint.js 实现的打印功能,IE9不能进行打印预览、火狐打印空白界面

    提示的内容:SCRIPT438: 对象不支持“ExecWB”属性或方法 首先解决IE9不能打印预览的问题: 查找了一大推资料 ,有两种说法:一种是IE的安全性级别太高:一种是需要安装什么   微软we ...

  4. mvc 获取 HtmlHelper 表达式值

    public static MvcHtmlString Try<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, ...

  5. shell数组中“和@的妙用

    #!/bin/bashlist=(4k"8k a bit""16k abc""32k gold"64k)for i in "${l ...

  6. [oracle] DBLINK +同义词,实现本地数据库访问另一台机器的数据库

    起因:订单表原来在90库上,后各种原因移到了40库上,需访问40库上的订单表.采用DBLINK+同义词方法: -- 1 在90机器上用GPSV4登录PLSQL,创建DBLINK,从本地数据库,连接到远 ...

  7. 明明白白AOP

    引子: AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果.但是AOP和OOP差别较大,要很好地理解这 ...

  8. 二十七 Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP

    设置代理ip只需要,自定义一个中间件,重写process_request方法, request.meta['proxy'] = "http://185.82.203.146:1080&quo ...

  9. kvm虚拟机克隆注意点

    1.硬盘空间会受第一次分配硬盘是的max capacity(最大容量) 限制,如果额外添加一块硬盘,会多出一个img文件,克隆这种虚拟机,两个img文件会都克隆下来,如果不重新命名会在原先img文件后 ...

  10. 1D mesauring

              The Basics of Measure Objects   2.1 the process of 1D Edge extraction       Then, the mean ...