鏈結
很巧妙的一道題,參考
把距離和速度分別作為x和y座標,以斜率代表追趕速率,簡直炫酷~
具體看上面的部落格,畫的很清楚,就不再抄寫一遍了。
1 #include 2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #includeview code10using
namespace
std;
11#define n 50010
12#define ll long long
13#define inf 0xfffffff
14const
double eps = 1e-8;15
const
double pi = acos(-1.0
);16
const
double inf = ~0u>>2;17
struct
point
1821
}p[n],ch[n];
22typedef point pointt;
23 point operator -(point a,point b)
2427
double
cross(point a,point b)
2831
int dcmp(double
x)32
36double
mul(point p0,point p1,point p2)
3740
double
dis(point a)
4144
bool
cmp(point a,point b)
4551
int graham(int
n)52
61if(k!=0)62
67 sort(p+1,p+n,cmp);
68 ch[0] = p[0
];69 ch[1] = p[1
];70 top = 1;71
for(i = 2; i < n ; i++)
7278
return
top;79}
80int
main()
8196
for(i = 0 ; i <= m ; i++)
97104
if(ch[i].y>maxy)
105109
}110 cout<1
<
111}
112return0;
113 }
HDU 2297 Run 計算幾何 凸包思想
題意 一維線段n個可以運動的點,位置為p,速度為v。求在運動的過程中有多少點可以領跑 在最前面 分析 可以將速度v也變成乙個維度,乙個點要超過另乙個點的前提條件是速度更大,其中可以根據求凸包的思想,如果這個點到另乙個點的相對距離與相對速度做除法運算,即求得斜率。斜率大的可以更先跑到前面並且不會被他超...
hdu1392凸包求周長
浩哥告訴說要用atan掃點而且只用掃瞄一遍就好了 我用兩都掃的方法不知道為什麼錯了好多次,求高手指教!下面是我用tan排序ac的 include include include define max 1000 define eps 1e 12 using namespace std struct p...
hdu 5033 單調棧 凸包
將人看成高度為 的樓,與樓混在一起按照橫座標排序,用單調棧正著掃一遍,再反著掃一遍,分別求出豎直線兩側的高度 出棧的條件 當前樓的高度比棧頂的樓高 為了維護凸包的性質,若棧頂和之前樓的斜率大於棧頂和當前樓的斜率 均為絕對值 出棧 如果當前樓是人,向前出棧直至找到棧頂樓與人夾角大於之前的樓與人的夾角 ...