---恢復內容開始---
題意:有n個點,規定起點,每次只能向左走,不能與之前的路徑交叉,求最多能經過幾個點。
思路:其實這題因為起點的y座標最小,那麼經過的點數一定就是所有的點數n,然後顯然我們優先選擇偏移角度最小的點作為後繼,也就是極角最小,那麼每次選擇乙個點後都按極角公升序排一次即可。我的**是遍歷了一遍,因為資料量本身很小。**有些亂,main函式前都是模板。
ac code:
#include#include#include
#include
using
namespace
std;
const
double eps=1e-8
;const
double inf=1e20;
int sgn(double
x)struct
point
point(
double xx,double
yy):x(xx),y(yy){}
point
operator + (const point& b)const
point
operator - (const point& b)const
double
operator * (const point& b)const
double
operator ^ (const point& b)const
//繞原點旋轉角度b(弧度值),後x、y的變化
void transxy(double
b)};
struct
line
line(point ss,point ee)
//兩直線相交求交點
//第乙個值為0表示直線重合,為1表示平行,為2表示相交
//只有第乙個值為2時,交點才有意義
pair operator &(const line &b)const
double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));
res.x += (e.x-s.x)*t;
res.y += (e.y-s.y)*t;
return make_pair(2
,res);
}};//
判斷線段相交
bool
inter(line l1,line l2)
double
dis(point a,point b)
//bool
onseg(point p,line l)
//判斷點在凸多邊形內,複雜度o(n)
//點形成乙個凸包,而且按逆時針排序(如果是順時針把裡面的<0改為》0)
//點的編號:0~n-1
//返回值:
//-1:點在凸多邊形外
//0:點在凸多邊形邊界上
//1:點在凸多邊形內
int inconvexpoly(point a,point p,int
n)//
判斷點在任意多邊形內,複雜度o(n)
//射線法,poly的頂點數要大於等於3,點的編號0~n-1
//返回值
//-1:點在凸多邊形外
//0:點在凸多邊形邊界上
//1:點在凸多邊形內
int inpoly(point a,point p,int
n)
else
if(onseg(side.e,ray))
else
if(inter(ray,side)) ++cnt;
}if(cnt%2==1) return1;
else
return -1;}
const
int maxn=55
;point pt[maxn];
line line[maxn];
intt,n,cnt,ans[maxn],vis[maxn];
intmain()
}cnt=0
; line[++cnt]=line(point(0
,pt[tmp].y),pt[tmp]);
ans[cnt]=tmp;
vis[tmp]=1
;
while(1
)
if(!f) continue
;
double now=(pt[i]-line[cnt].e)*(line[cnt].e-line[cnt].s)/dis(pt[i],line[cnt].e)/dis(line[cnt].e,line[cnt].s);
if(now>max)
}if(!tmp) break
; vis[tmp]=1
; line[++cnt]=line(line[cnt-1
].e,pt[tmp]);
ans[cnt]=tmp;
}printf("%d
",cnt);
for(int i=1;i<=cnt;++i)
printf("%d
",ans[i]);
printf("\n
");}
return0;
}
極角排序 POJ1696
vj題目連線 一種奇怪的蟲子不能右轉且走過路線之間不能有交點,吃植物才能存活,給出植物的座標,求蟲子要怎樣走才能活得最久 吃的植物越多活越久 輸入 樣例數,n組樣例,每組給出乙個n,然後n行每行給出3個數,分別是植物編號 植物x座標 植物y座標 輸出 能吃的最大植物數目,並給出路線 因為蟲子只能左轉...
POJ 1696 極角排序
題目中指定了ant爬行時的幾種規則,從中我們可以知道ant是按照當前所處位置,對其他的plant進行極角排序後,選擇角度最小過去,重複,一直到走到最後乙個plant。sort一發就可以了 include include include include include const double eps...
POj 1696 Space Ant (極角排序)
題意 乙隻螞蟻,只會向左轉,現在給出平面上很多個點,求解一種走法,能使得螞蟻能經過的點最多,每個頂點該螞蟻只能經過一次,且所行走的路線不能發生交叉.對於題目所輸入的點,先找出最左下方的頂點 即縱座標最小的頂點 然後對剩下的頂點按照對與左下點的極角排序,然後反覆找最左下的點,反覆進行極角排序,同時記錄...