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

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

题面

传送门

题解

退火就好了

记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低

话虽如此然而我自己打的退火答案永远是\(0\)……只好抄了一发……但是完全看不出有什么区别啊……

//minamoto #include<bits/stdc++.h> #define R register #define rd ((.0+rand())/RAND_MAX) #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v) template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;} template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;} using namespace std; char buf[1<<21],*p1=buf,*p2=buf; inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;} int read(){ R int res,f=1;R char ch; while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1); for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0'); return res*f; } const int N=1005;const double eps=1e-2,D=0.997; inline double dis(R double x,R double y,R double xx,R double yy){ return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy)); } struct node{int x,y,r;}p[N];int a[N],b[N],Ri,n,m; int calc(double x,double y){ int res=0;double r=Ri; fp(i,1,n)cmin(r,dis(p[i].x,p[i].y,x,y)-p[i].r); if(r<0)return 0; fp(i,1,m)if(dis(a[i],b[i],x,y)<=r)++res; return res; } inline void randpos(double &x,double &y){x=2*Ri*rd-Ri,y=2*Ri*rd-Ri;} int solve(double x,double y){ int mx=calc(x,y),now=mx; for(double T=Ri;T>eps;T*=D){ double nt=T+0.1; double xx=x+2*nt*rd-nt,yy=y+2*nt*rd-nt; int nans=calc(xx,yy); if(nans>mx||exp(1e4*(nans-now)/T)>rd)x=xx,y=yy,now=nans; cmax(mx,nans); } return mx; } int main(){ srand(time(0)); // freopen("testdata.in","r",stdin); n=read(),m=read(),Ri=read(); fp(i,1,n)p[i].x=read(),p[i].y=read(),p[i].r=read(); fp(i,1,m)a[i]=read(),b[i]=read(); int res=0;double x,y; fp(i,1,20)randpos(x,y),cmax(res,solve(x,y)); printf("%d\n",res); return 0; }

转载于:https://www.cnblogs.com/bztMinamoto/p/10698441.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100987.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用JavaScript刷新验证码

    使用JavaScript刷新验证码今天学习了验证码的开发,日常生活中经常点验证码,今天自己也来做一个验证码                           首先是用一个文件产生随机验证码:  &lt;%@pageimport="java.awt.*"%&gt;&lt;%@pageimport="java.util.*"%&gt;&lt;%@pa…

    2025年8月8日
    4
  • qlineedit自动补全_qlineedit只能输入数字

    qlineedit自动补全_qlineedit只能输入数字转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=referral显示密码显示密码时,利用lineedit-password-character属性更改密文显示字符内容。QLineEdit[echoMode=”2″]{lineedit…

    2025年6月25日
    1
  • Java String 如何加双引号

    Java String 如何加双引号Java String 如何加双引号

    2022年4月23日
    50
  • 小学六年级的读者,自学计算机,会爬虫,搞崩过学校网站,还有 Girlfriend…..[通俗易懂]

    小学六年级的读者,自学计算机,会爬虫,搞崩过学校网站,还有 Girlfriend…..[通俗易懂]大家好,我是小林。我之前遇到一个很奇怪的读者,他的头像是电影《V字仇杀队》里的面具。感觉上去是一个黑客爱好者,不是一个好惹的家伙,小林看了瑟瑟发抖。结果,他来了这么一句,「哥哥,在吗?」我头顶瞬间冒出一万个问号,怎么跟头像冷酷的感觉完全相反。只听过有的读者叫我小林哥,但是还真没遇到过直接称呼哥哥的,能说出这个称呼的话,感觉对方年纪不大。然后,他请教我关于kaliLinux安装失败的问题要怎么解决,我没有安装过,所以我也没办法解决他的问题,就让他自己去网上搜搜看看。然后,他还是没解决,

    2022年5月2日
    58
  • D3旭日图_日新图

    D3旭日图_日新图本文将介绍D3旭日图的画法下面我们先来看看结果展示html代码<!DOCTYPEhtml><html><head><metacharset=”utf-8″><title>Sequencessunburst</title><scriptsrc=”js/d3.min.js…

    2022年9月26日
    2
  • android刘海屏适配(刘海屏或圆角适配)

    安卓P版本也就是刚发布的安卓9.0其中就加入了刘海屏相关的API。其相关行为与功能变更也是非常多的,从其变更的趋势及功能来看,google在进一步的收紧权限。其P版本变更行为中就加入了对非SDK接口使用的新限制。无论是直接,通过反射还是通过JNI。只要应用程序引用非SDK接口或尝试使用反射或JNI获取其句柄,就会应用这些限制。通常,应用程序应仅使用SDK中类的官方记录部分。特别是,这意味着…

    2022年4月10日
    172

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号