uoj
考慮把那最後一條直線拎出來,並且旋轉到和\(y\)軸平行(其他直線同時一起旋轉),然後它和其他直線相交形成\(n+1\)個區間,現在要知道這些區間是否處在乙個面積有限的區域
可以發現一段在有限區域當且僅當區間的兩側區域都是有限的.所以對線的兩側分開考慮,先考慮左邊,如果直線的乙個區間旁邊的區域有限,那麼一定可以找到區間上面一條直線和下面一條直線在所求直線的左側有交點,這要滿足上面直線的斜率大於下面直線,並且他們能覆蓋這兩條直線與所求直線的交點形成的區間,使得一些連續段區間的左側為有限區域,那麼可以對其他直線從下往上加入,每加入一條直線就找到最下面的並且斜率小於他的直線,然後把對應交點形成的區間覆蓋,這些直線可以單調棧維護,區間覆蓋可以差分解決.右邊同理,把大於小於反過來就行.最後看每一段是否在兩邊都被覆蓋即可
#include#include#include#include#include#include#include#include#include#include#include#define ll long long
#define db double
using namespace std;
const int n=1e5+10;
const db pi=acos(-1),eps=1e-10;
int rd()
while(ch>='0'&&ch<='9')
return x*w;
}struct point
point(db nx,db ny)
void rot(db cta)
point operator - (const point &bb) const
db operator * (const point &bb) const
}a[n][2];
struct line
line(point xx,point yy)
bool operator < (const line &bb) const
tp=0;
for(int i=1;i<=n;++i)
if(z) ++c2[st[z]],--c2[i];
if(!tp||b[st[tp]].k0&&c2[i]>0;
} an[++ta]=0;
for(int i=1;i<=ta;++i) printf("%d",an[i]);
return 0;
}
UOJ 242 UR 16 破壞蛋糕
一句話題意 平面上有 n 1條直線,前 n 條直線把平面分成許多塊,這些塊有些面積有限,有些面積無限,而第 n 1 條直線不經過前 n 條直線的交點,且一定不和前 n 條直線中的任意一條平行,求第 n 1 條直線被前 n 條直線劃分成的 n 1 段中哪些在面積有限的塊裡,哪些在面積無限的塊裡。保證第...
UOJ 242 UR 16 破壞蛋糕
傳送門 貌似出題人給的方法一點都不友好qwq 那個如果乙個平面是有限的,那麼它被分為兩部分,這兩部分都是有限的。假設我們要求的那條直線是y軸 不是也可以轉 那麼考慮對直線左右分別計算平面是否有限。就直線右側而言,我們把交點按照順序排好。交點ya 和yb 之間的區間對應平面是有限的,當且僅當存在yc ...
UOJ 192 UR 14 最強跳蚤
題目鏈結 暑期課第二天 樹上問題高階 具體內容看筆記部落格吧 題意n個節點的樹t 邊有邊權w 求滿足 u,v 上所有邊權乘積為完全平方數的路徑有多少條 看到 所有邊權乘積為完全平方數 想到完全平方數的特殊性 就是分解質因數後 質因數指數都為偶數 然後就想到分解邊權質因數 判質路徑邊權奇偶性 後者由於...