模擬退火 JSOI2016 炸彈攻擊1

2021-10-09 22:55:21 字數 2274 閱讀 1908

題目背景

jyy 最近迷上了一款塔防遊戲,在遊戲裡 jyy 除了建設建築,還可以使用炸彈對螢幕上的敵人進行範圍殺傷。

題目描述

遊戲地圖可以簡單認為是乙個二維平面。jyy 建造了nn個建築,每個建築都是乙個圓,其中第ii個建築的圓心位於(x_i,y_i)(xi​

,yi​ )且半徑為r_iri​

。地圖上一共有mm個敵人,乙個敵人可以近似看成乙個平面上的點,其中第ii個敵人位於(p_i,q_i)(pi​

,qi​ )。jyy 可以使用一枚可以設定半徑的炸彈,可以設定乙個不超過rr的範圍,然後選擇平面上的乙個點引爆,範圍內的所有敵人全部消滅。

當然,由於炸彈威力巨大,如果**範圍接觸到 jyy 的建築,那麼 jyy 的建築也會受到損傷。(注:如果炸彈的**範圍僅接觸到了 jyy 建築的邊界,則不會對 jyy 的建築造成損傷;如果敵人出現在了**範圍的邊界,則該敵人被消滅)jyy 可以自由控制炸彈的**地點和**半徑。作為乙個保守的玩家,他希望在保證自己建築毫髮無損的情況下,消滅盡量多的敵人。

輸入格式

第一行包含三個非負整數,分別為n,m,rn,m,r;

接下來nn行,每行三個整數,其中第ii行為x_i,y_i,r_ixi​

,yi​ ,ri​

,表示第ii個建築的位置和半徑。資料保證所有建築不相交(但是有可能邊界接觸);

接下來mm行,每行兩個整數,其中第ii行為p_i,q_ipi​

,qi​ ,表示第ii個敵人的位置。

輸出格式

輸出一行乙個整數,表示 jyy 最多可以消滅的敵人數量。

輸入輸出樣例

輸入 #1複製

1 5 3

0 0 1

3 3-3 3

3 -3

3 00 3

輸出 #1複製

3說明/提示

對於2020%的資料,滿足mm==22;

對於另外2020%的資料,滿足nn==00;

對於另外2020%的資料,滿足mm\leq≤5050;

對於100100%的資料,滿足

00\leq≤nn\leq≤1010,00<11\leq≤r,r_ir,ri​

\leq≤22\times×10^410

4,|p_i|∣pi​

∣,|q_i|∣qi​

∣,|x_i|∣xi​

∣,|y_i|∣yi​

∣\leq≤22\times×10^4104。

①將改動座標時的rand對乙個合適大小的數取模,例如本題,我用的是500,這樣可以防止隨機的移動過於不穩定;

②手算一下t的上下界,當t過大過小時都難以找到更優解,這樣減小了t的範圍,剩下時間可以多sa幾次;

③對於本題我們還可以在遇到次優解判斷是否接受時除以根號t(然而貌似這樣不符合物理定義),因為t的變化較大,這樣確保在t較小時也有可能更新,t較大時也不會全盤接受。

這樣優化之後自測能連過十幾次沒wa,ac率應該至少有90%了,而且最大點也才500+ms,不會t掉

#include

#define esp 1e-10

#define dt 0.998

using

namespace std;

struct buildingbld[20]

;struct enemyenm[

1010];

int n,m,r,ans1,ans2;

double sumx,sumy;

double

dist

(double x1,

double y1,

double x2,

double y2)

intdeal

(double x,

double y)

for(

int i=

1;i<=m;i++

)return sum;}/

voidsa(

)elseif(

exp(

-delta/t)

*rand_max<

rand()

) t*

=dt;}}

intmain()

for(

int i=

1;i<=m;i++

) sumx/

=m,sumy/

=m;for

(int i=

1;i<=

6;i++)sa

();printf

("%d\n"

,ans2)

;return0;

}

JSOI2016 炸彈攻擊(模擬退火)

模擬退火居然不出題答,這個出題人腦子進水了。由最小圓覆蓋那一套,最優的圓是以上三種情況之一 1.乙個答案點就是圓,半徑 0 2.兩個點連成的線段為直徑的圓 3.三點共園 直接列舉,判斷是 o m 4 的。可能可以優化掉乙個 m 然後你發現做不下去了。考慮退火,這個題直接以覆蓋的點數作為價值退火是不太...

JSOI2016 炸彈攻擊Attack

炸彈攻擊 故事背景 jyy 最近迷上了一款塔防遊戲,在遊戲裡 jyy 除了建設建築,還可以使用 炸彈對螢幕上的敵人進行範圍殺傷。問題描述 遊戲地圖可以簡單認為是乙個 2 維平面。jyy 建造了 n 個建築,每個建築都是乙個圓,其中第 i 個建築的圓心位於 x y 且半徑為r 地圖上一共有 m 個敵人...

JSOI2016 最佳團隊

這種最大化形如 x y 的式子的題,很容易想到分數規劃。二分答案,對於當前的mid,設d i p i mid s i 考慮到當乙個節點i被選,那麼fa i 也要被選,那麼乙個想法是選取當前最大的d,然後把它的兒子的d放入堆裡。但是這個方法是錯誤的 然而我一開始就這麼打了,只有10分 題目給出的是一棵...