多圓面積交
typedef long long ll;
typedef unsigned long long ull;
typedef vector vi;
const int inf = 0x3f3f3f3f;
const double eps = 1e-10;
const int mod = 100000007;
const int maxn = 1000010;
const double pi = acos(-1.0);
#define sqr(x) ((x)*(x))
const int n = 1010;
double area[n];
int n;
int dcmp(double x)
struct cp
cp(double xx, double yy, double ang = 0, int t = 0)
void get()
} cir[n], tp[n * 2];
double dis(cp a, cp b)
double cross(cp p0, cp p1, cp p2)
int circrosscir(cp p1, double r1, cp p2, double r2, cp &cp1, cp &cp2)
bool circmp(const cp& u, const cp& v)
bool cmp(const cp& u, const cp& v)
double calc(cp cir, cp cp1, cp cp2)
void cirunion(cp cir, int n)
tp[tn++] = cp(cir[i].x - cir[i].r, cir[i].y, pi, -cnt);
tp[tn++] = cp(cir[i].x - cir[i].r, cir[i].y, -pi, cnt);
sort(tp, tp + tn, cmp);
int p, s = cir[i].d + tp[0].d;
for (int j = 1; j < tn; ++j)
} }
void solve()
//area[i]為重疊了i次的面積
//tot 為總面積
double tot = 0;
for(int i=1; i<=n; i++) tot += area[i];
printf("%f\n", tot);
}
int main()
多圓面積並
#include#include#include#include#include#define ld double
#define eps 1e-13
using namespace std;
int n,top,st,ed;
ld xl[1001],xr[1001];
ld ans;
bool del[1001];
struct datat[1001],sk[1001];
struct linep[1001];
ld dis(data a,data b)
bool cmp1(data a,data b)
sort(p+1,p+sz+1,c***);
for(i=1;i<=sz;i++)
st=i;ed=j-1;i=j-1;
mid=(l+r)/2;
fl=getf(l);fr=getf(r);fmid=getf(mid);
ans+=simpson(l,mid,r,fl,fmid,fr,cal(r-l,fl,fmid,fr));
}}int main()
給你一堆點,找銳角三角形。
two pointer 思想。
統計出所有銳角和直=鈍角的數目。
做法是這樣的:對每個點對所有點極角排序,然後two pointer計算每乙個銳角(乙個邊上有好幾個點也會被統計好幾次),直角鈍角。然後ans=(銳角個數-直角鈍角個數*2)/3;因為每乙個角度可能也只可能出現在乙個三角形中。
但是一上來沒弄懂,所以隊友想了乙個思路也能過,先統計直角和鈍角的個數。然後c(n,3)統計所有情況,不能構成三角形的是三點共線的情況,所以n^2logn統計三點共線(two pointer)。然後再減去直角鈍角個數即可。兩種方法均可過。
#include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
struct point
point operator -(const point &a) const
}p[2010];
int n;
ll xmul(const point &a,const point &b)
ll dot(const point &a,const point &b)
bool cmp(const point &a,const point &b)
return xmul(a,b) > 0;
}vectorvec;
int main()
}ans=(rui-2*zhidun)/3;
printf ("%i64d\n",ans);
}return 0;
}
計算幾何模板
sgn返回x經過eps處理的符號,負數返回 1,正數返回1,x的絕對值如果足夠小,就返回0。const double eps 1e 8 int sgn double x double mysqrt double x pt是point的縮寫 int版 struct pt pt int x,int y ...
計算幾何模板
include define vct point using namespace std const double pi atan2 0,1 const double eps 1e 8 int sgn double d struct point bool operator point b const...
計算幾何 模板
include include include include typedef double db const db eps 1e 9 const db pi acos 1 判斷符號 inline intsign db ps 比較大小 inline intcmp db ps,db b 點 struc...