Codeforces gym 100517(二分,同方向判斷)
題意:給了一個凸包,按順時針順序給點,點數不超過10萬,再給了兩個不同點,點嚴格在凸包內,凸包保證沒有三點共線,問凸包上有多少對點(pi, pj),滿足pi和pj的線段 與 兩個點的線段嚴格相交,線段間嚴格相交意思是交點不在端點。
鏈接:http://codeforces.com/gym/100517 (K題)
解法:設凸包有n個點,將凸包點集p擴大一倍,變為2n個點。枚舉前n個點,每次枚舉到 i ,在[i+1, i+n-1]內進行二分,找到兩個點p1,p2,滿足p1和p2是”最靠近” 那兩點線段 的點。統計下中間個數即可。二分過程中需要進行一種同方向判斷,即判斷該直線是否在某一個線段”左邊”或”右邊”,用叉積判斷即可。
代碼
//Hello. I'm Peter.
//#pragma comment(linker, /STACK:102400000,102400000)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include