hdu 4033 二分判斷

2021-06-18 00:47:02 字數 1614 閱讀 8412

/*

終於有題我過了t t。。

剛開始jc看錯題了,以為是到各邊的距離,然後覺得蠻水的,直接以0 0 為內點,

旋轉後求垂線圍成的多邊形是否是正多邊形即可。

後來一看是到各頂點的距離。想了一會兒。

後來用餘弦定理,二分邊長(邊長和反余弦是單調的)判斷所有構成三角形的頂角

和是否為2*pi即可。

構不成三角形的話直接判斷即可。注意二分最後相等也需要判的,但是一直相等找

不到結果的話就要跳出了。1y~

精度開的1e-8,測試了下,1e-6也沒問題。

感謝xymscau同學的檢查,**已經改過。二分邊長後需要判定角度是否為多邊形

的角度,否則會出現菱形的情況,比如下組資料。**已更正在hdu依然能ac,顯然

資料弱了,估計標程也沒考慮這個情況。。。但是只有精度開到1e-6能過,其他均不行,無語。。

42 1.414 4 1.414

應該輸出impossible,即使構成邊長和菱形長度相同的正方形,但是不存在乙個這樣

的點滿足上述邊長。

*/#include #include #include #include #include #include #include #include #include #include #include #include #define mid(x,y) ( ( x + y ) >> 1 )

#define l(x) ( x << 1 )

#define r(x) ( x << 1 | 1 )

#define for(i,s,t) for(int i=s; iy + eps;} // x > y

bool xy(double x,double y) // x < y

bool dyd(double x,double y) // x >= y

bool xyd(double x,double y) // x <= y

bool dd(double x,double y) // x == y

double ang_cal(double a, double b, double c)

int solve(int n, double x)

if( dy(ang, 2*pi) ) return 1; // 角度大,也就是x過大

if( xy(ang, 2*pi) ) return -1; // 角度小,也就是x過小

if( dd(ang, 2*pi) ) return 0;

}

bool check(int n, double ang, double x)

int main()

if( ans > 0 )

end = mid;

else

begin = mid;

} printf("case %d: ",ind++);

if( f )

printf("%.3lf\n", mid);

} else

printf("impossible\n");

} return 0;

}

hdu1669 二分多重匹配 二分

n個人分成m組,求人數最多的那一組人數的最小值。每個人肯定只能匹配乙個組,但乙個組可以匹配多個人,因此屬於多重匹配。我們設定乙個limit,表示每組最多能容納的人數。在dfs u 尋找u的匹配時,如果某一組vv的人數小於limit,那麼可以把u和vv匹配,vv已經匹配的人數 1。否則,當人數已經達到...

hdu2413 二分 二分匹配

題意 地球和外星球大戰,地球有n個飛船,外星球有m個飛船,每個飛船有自己的其實戰艦和戰艦增長率,星球於星球之間有距離,問你最少多少年地球可以打敗外星球,每個星球最多只能和乙個星球對戰.思路 題意的最後一句話告訴我們這個題目滿足二分圖,我們可以二分列舉多少年打敗,每次都重新建圖,對於h i 和 a j...

hdu 3681 bfs 二分 狀壓dp判斷

思路 機械人從出發點出發要求走過所有的y,因為點很少,所以就能想到經典的tsp問題。首先bfs預處理出 y f g 之間的最短距離,由於g點可以充電,到達g點就把當前能量更新為電池容量然後繼續走。因為每個g點只能充一次電,這就好像tsp中的每個點只能走一次一樣,然後就是二分答案了,用狀壓dp判定當前...