cf 13F Letter A 計算幾何

2021-07-09 17:41:04 字數 2137 閱讀 3992

給出 三個線段的起點,終點

讓你判斷是否組成乙個a字母

條件如下:

1 有兩線段同端點,並且第三條線段經過了前兩條線段上的點,連線他們

2、有共同端點的兩線段夾角大於零小於等於90度

沒什麼坑。。。老老實實做就是了。。注意一些細節就好

思路: 符合要求的六個點,必然是2個相同,四個分別不同

1、那麼重複次數為2的點個數為1,重複次數為1的點個數為4;(共六個點)

2、找到重複的那個點後,從而確定哪兩條是有公共端點的線段,然後求出他們的夾角(注意是>0&&《90)開始寫成<90

3、判斷第三條線段的端點s是否在line2,是求出其到line2一端的長度是否滿足要求,同理判斷另一側

如果以上有任一不滿足,say no。

都滿足了。。say yes

參考code:

#include #include #include #include #include #include using namespace std;

const double pi=acos(-1.0);

struct point

bool operator==(point &b) const

bool operator<(const point &b) const

double multiply(point sp,point ep,point op)

bool online(lineseg l,point p)

double dist(point p1,point p2)

int main()

__int64 flag=0;

__int64 cun=0;

point who;

who.x=who.y=-1;

for (it=sb.begin();it!=sb.end();it++)

else

if (it->second==1)

cun++;

} __int64 ret=0;

if (cun==4&&flag) ret=1;

if (!ret)

for (i=1;i<=3;i++)

for (i=1;i<=3;i++)

__int64 line2,line3,line1;

if (i==1)

if (i==2)

if (i==3)

point p1,p2;

if (ll[line2].s==who) p1=ll[line2].e;

if (ll[line2].e==who) p1=ll[line2].s;

if (ll[line3].s==who) p2=ll[line3].e;

if (ll[line3].e==who) p2=ll[line3].s;

__int64 flag_angle=0;

double ret_angel= angle(who,p1,p2);

if (ret_angel<0) ret_angel=-ret_angel;

if (ret_angel>0&&ret_angel<=pi/2)

flag_angle=1;

ret_angel= angle(who,p2,p1);

if (ret_angel<0) ret_angel=-ret_angel;

if (ret_angel>0&&ret_angel<=pi/2)

flag_angle=1;

if (flag_angle==0)

__int64 fla=0;

double dis3=0;

double dis2=0;

if (online(ll[line2],ll[line1].s))

if (online(ll[line2],ll[line1].e))

if (fla==0)

fla=0;

if (online(ll[line3],ll[line1].s))

if (online(ll[line3],ll[line1].e))

if (fla==0)

else

printf("yes\n");

}

return 0; }

//57283

CF 13E Holes 塊狀鍊錶

題目描述 一條直線上n個點,每個點有個 彈力 可以把當前位置x上面的ball彈到x a x 上面。兩種操作 0.修改a處的彈力值,程式設計b 1.詢問a點的ball經過多少次能跳出n個點外 就是出界了 求出彈跳的次數和最後落腳的點。塊狀鍊錶就是用來暴力模擬的。用塊狀鍊錶可以把時間複雜度從o n 變成...

計軟對抗賽之 愛上CF

time limit 1000ms memory limit 65536k 有疑問?點這裡 cf,codeforces不是crossfire。身為乙個acmer,re大神與soaring大神最喜歡做每五天一次的cf,從11 30到1 30,然後和逗比學長們一起等著跑資料等到兩點半,然後再一起嘲笑一坨...

北郵計院13上機真題

accept 207 submit 852 time limit 1000ms memory limit 65536kb description 請你計算出第x年y月z日是第x年的第幾天。其中,1月1日是第一天,1月2日是第二天,以此類推。計算時請注意閏年的影響。對於非整百年,年數能整除4是閏年,否...