GDOI2015模擬12 20 雞腿 夢境

2021-08-21 08:32:56 字數 1311 閱讀 5783

雞腿做了乙個好夢呢!他化身鋼鐵俠大戰全宇宙的各種怪物,並且取得了勝利。在夢的結尾,雞腿開的飛船困在了一片廢棄飛船群中,同時由於引擎故障,他只能在平面內移動。廢棄飛船群可以描述為許多圓形的飛船,當然因為各種奇怪的原因,飛船可能疊加在一切。雞腿也駕駛著飛船在這個平面中。一開始的時候雞腿的飛船是不會和廢棄的飛船有疊加部分的,雞腿駛出這片區域時,可以蹭過某乙個廢棄飛船,但不能撞上更不能擠開它(質量問題),更不能和廢棄飛船疊起來。雞腿要立刻離開這片區域進行補給,你能告訴他現有條件下可以離開這片廢棄飛船群嗎?

n ≤ 300,資料組數 ≤ 5。

顯然先把飛船的圓轉移到障礙物的圓上,那麼就變成了乙個點是否能逃出生天。

如果兩個圓相交,連邊。

很容易想到的一種做法是判斷點是否在乙個環構成的多邊形裡。

*n元環沒有多項式演算法。

考慮換個思路,從這個點隨機射一條射線,與它相交的邊的權值為1。

現在要找乙個權值和為奇數的環,這個顯然就很簡單了,bfs一就好了。

code:

#include

#include

#define db long double

#define fo(i, x, y) for(int i = x; i <= y; i ++)

#define min(a, b) ((a) < (b) ? (a) : (b))

#define max(a, b) ((a) > (b) ? (a) : (b))

using

namespace

std;

const

int n = 305;

const db eps = 1e-10;

const db theta = 0.5;

struct p

} a[n], b;

p angle(db x)

p operator *(p a, p b)

p rotate(p a, db b)

db dis(p a, p b)

int n; db x, y, xx, yy, r, r[n];

int ans, bz[n][n], f[n][2], d[n * n * 2][2], d0;

int main()

fo(i, 1, n) f[i][0] = f[i][1] = 0; ans = 1;

fo(i, 1, n) if(!f[i][0] && !f[i][1])

}if(f[i][1])

}if(ans) printf("yes\n"); else

printf("no\n");

}}

GDOI2015模擬12 21 雞腿 桌球

桌球遊戲可不是桌球!桌球好像也和這個遊戲沒啥關係。這個遊戲的主角就是 區間。對於兩個區間,如果 a,b 和 c,d 區間滿足 c a d c a c b d c b d,就可以從 a,b 到 c,d 去。然後現在有兩種操作,分別是 1 x y x y 表示在區間集合中新增 x,y 這個區間,保證新加...

GDOI2015 水題 tarjan縮點

這一題,我當年只會 60 分做法。我們考慮對原圖跑一波邊雙,然後縮成乙個森林。對於森林中的每一棵樹,我們欽定乙個根。令 siz x 表示以 x 為根的子樹中,在原圖中點的個數。令當前的答案為 ans 對於一條邊 u,v 如果這兩個點在縮點後的同個點內,那麼什麼都不用管,直接輸出 ans 即可。否則我...

GDOI模擬 排列

給你m個對1到n的排列的特徵,特徵有兩種 1 x y v 排列的第x個數到第y個數之間的最大值為v 2 x y v 排列的第x個數到第y個數之間的最小值為v 要求你還原出這個排列。刷水有益身心健康。既然是求方案,資料範圍又很小,那麼明顯的要用把點向權值連邊。然後他每次給出範圍之後再進行刪邊。最後,二...