【计算几何】信号覆盖

(对上面的讨论，有一点误区需要注意，不能直接根据不包含某点的所有三角形个数来求P，这一点想了很久才想清楚，因为一个四边形，枚举四个点的时候，这个四边形会被计算四次，所以除以要除以四）

#include <algorithm>
#include <cmath>
#include <cstdio>
using std::sort;

long long c[1600][10];

struct pos;
long crp(const pos& a,const pos& b);

struct pos
{
double x;
double y;
bool operator<(const pos& p2) const
{
return x*p2.y-p2.x*y < 0;
}
};

long n;
pos a[3010];
pos b[3010];
long long X = 0;

inline void swap(pos& a,pos& b)
{
pos t = a;
a = b;
b = t;
}
void Qsort(int l,int r)
{
int i=l,j=r;
pos mid=b[(l+l+r)/3];
while (i<=j)
{
while ((b[i].x*mid.y-b[i].y*mid.x)<0)i++;
while ((b[j].x*mid.y-b[j].y*mid.x)>0)j--;
if(i<=j)swap(b[i++],b[j--]);
}
if(i<r)Qsort(i,r);
if(l<j)Qsort(l,j);
}

inline void make(long l)
{
for (long i=1;i<l;i++)
{
b[i].x = a[i].x - a[l].x;
b[i].y = a[i].y - a[l].y;
}
for (long i=l+1;i<n+1;i++)
{
b[i-1].x = a[i].x-a[l].x;
b[i-1].y = a[i].y-a[l].y;
}
#ifdef Debug
for (long i=1;i<n;i++)
printf("%lf%lf\n",b[i].x,b[i].y);
#endif
Qsort(1,n-1);
for (long i=1;i<n;i++)///////////
{
b[i+n-1] = b[i];    ///////
}
for (long i=1,j=2;i<n;i++)
{
pos c;
c.x = -b[i].x;
c.y = -b[i].y;
while (c.x*b[j].y-c.y*b[j].x > 0.0)
j++;
if (j-i-1 >= 2) X+=((j-i-1)*(j-i-2))>>1;
}
}

inline long long C(long i,long j)
{
if (c[i][j]) return c[i][j];
if (i < j) return 0;
if (j == 0 || i == j) return 1;
return c[i][j] = C(i-1,j)+C(i-1,j-1);
}

inline void solve()
{
for (long i=1;i<n+1;i++)
make(i);
long long ans = 2*C(n,4)+X-(long long)(n)*C(n-1,3);
printf("%lf",double(ans)/double(C(n,3))+3.0);
}

inline int getint()
{
int res = 0; char tmp; bool sgn = 1;
do tmp = getchar();
while (!isdigit(tmp) && tmp != '-');
if (tmp == '-')
{
sgn = 0;
tmp = getchar();
}
do res = (res << 1) + (res << 3) + tmp - '0';
while (isdigit(tmp = getchar()));
return sgn ? res : -res;
}

int main()
{
freopen("signaling.in","r",stdin);
freopen("signaling.out","w",stdout);
scanf("%ld",&n);
for (long i=1;i<n+1;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}
solve();
return 0;
}

• 本文已收录于以下专栏：

☆【计算几何】信号覆盖

Description Input 输入第一行包含一个正整数 n, 表示房子的总数。接下来有 n 行，分别表示每一个房子的位置。对于 i = 1, 2, .., n, 第i 个房子的坐标用一对...
• Whjpji
• 2012年03月24日 08:52
• 478

【BZOJ 1913】 [Apio2010]signaling 信号覆盖

• Regina8023
• 2015年05月07日 09:31
• 1361

[BZOJ 1913][APIO 2011]信号覆盖(计算几何)

• qpswwww
• 2015年04月28日 11:55
• 1007

[BZOJ1913][Apio2010]signaling 信号覆盖（计算几何+组合数学）

• Clove_unique
• 2017年02月07日 19:04
• 399

hdu 1077 Catching Fish 计算几何（圆覆盖）

• a601025382s
• 2014年08月13日 12:42
• 717

[BZOJ 1913][Apio2010]signaling 信号覆盖：计算几何

• SmallSXJ
• 2017年05月03日 15:30
• 186

【BZOJ2823】【AHOI2012】信号塔 最小圆覆盖 计算几何

• Vmurder
• 2015年06月23日 14:04
• 1371

unix-关于信号、信号处理函数

• crfoxzl
• 2008年03月03日 16:34
• 1588

基站覆盖范围,D2D通信,WIMAX和LTE的区别（初）

1.    不同基站（宏基站，微基站等）的覆盖范围？基站覆盖范围与什么有关?与发送功率的关系？ （1）宏基站，微基站，微微基站 区别： 宏基站： 这是个网优参数。 跟用户密度有关。 一般做仿...
• qq_18832565
• 2017年04月19日 21:24
• 331

bzoj 1913: [Apio2010]signaling 信号覆盖

• heheda_is_an_OIer
• 2016年04月20日 15:04
• 397

举报原因： 您举报文章：【计算几何】信号覆盖 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)