poj 1375 Intervals 圓的切線

2021-08-27 04:30:16 字數 955 閱讀 6825

題意:有一光源,被若干個圓摭住了,求地面上陰影

題解:利用向量旋轉求出切線與圓的兩個交點,根據兩點成線得出ax+by+c=0的直線,令y=0時,求出地面的座標,再合併有連線的陰影。

//**如下:

#include#include#include#include#define eps 1e-8

//using namespace std;

const int maxn=1000;

struct point;

struct circle cir[maxn];

struct nodenode[maxn];

double f[maxn][2];

point st;

double distance(point p1,point p2)

void getline(point p1,point p2,double &a,double &b,double &c)

void cirinser(circle c,point &inser1,point &inser2)//圓與切線交點(保證st在圓外)

bool zero(double x)

bool cmp( node a, node b)

int main()

std::sort(node,node+n,cmp);

f[0][0]=node[0].s;

f[0][1]=node[0].e;

int cnt=0;

for(i=1;i0)f[cnt][1]=node[i].e;

else if(node[i].s-f[cnt][1]>0)

}for(i=0;i<=cnt;i++)

printf("%.2lf %.2lf\n",f[i][0],f[i][1]);

printf("\n");

} return 0;

}

POJ 1201 Intervals(區間約束)

思路 區間約束問題,轉最長路跑spf aspfa spfa 注意區間是 0,50000 0,50000 0,500 00 但是我們連邊是add u 1 v,w add u 1,v,w add u 1,v,w 所以考慮整體右移一位,然後從0 00開始跑,此外還有乙個限制是 d v d v 1 0,1 ...

POJ 1201 Intervals 差分約束系統

題目 有乙個序列,題目用n 個整數組合 ai,bi,ci 來描述它,ai,bi,ci 表示在該序列中處於 ai,bi 這個區間的整數至少有ci 個。如果存在這樣的序列,請求 出滿足題目要求的最短的序列長度是多少。如果不存在則輸出 1。輸入 第一行包括乙個整數n,表示區間個數,以下n 行每行描述這些區...

POJ1201 Intervals 線段樹 貪心

原題鏈結 題意 給定一些區間,每個區間裡必須取ci個數,這些數組成乙個集合z,求z的最少的元素數 思路 由於如果兩個區間如果有重複取的元素,那麼這個元素一定是在左邊的這個區間的最右邊的那些元素。所以我們按照區間的右邊界排序後,總是如果當前區間還需要取數,那麼就從右往左取還沒有被取的數即可。然後就可以...