/*
終於有題我過了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判定當前...