題意:有一光源,被若干個圓摭住了,求地面上陰影
題解:利用向量旋轉求出切線與圓的兩個交點,根據兩點成線得出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的最少的元素數 思路 由於如果兩個區間如果有重複取的元素,那麼這個元素一定是在左邊的這個區間的最右邊的那些元素。所以我們按照區間的右邊界排序後,總是如果當前區間還需要取數,那麼就從右往左取還沒有被取的數即可。然後就可以...