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

1913: [Apio2010]signaling 信号覆盖

Time Limit: 20 Sec Memory Limit: 64 MB

Submit: 639 Solved: 255

[Submit][Status][Discuss]

Description

Input

输入第一行包含一个正整数 n, 表示房子的总数。接下来有 n 行,分别表示 每一个房子的位置。对于 i = 1, 2, .., n, 第i 个房子的坐标用一对整数 xi和yi来表 示,中间用空格隔开。

Output

输出文件包含一个实数,表示平均有多少个房子被信号所覆盖,需保证输出 结果与精确值的绝对误差不超过0.01。

Sample Input

4

0 2

4 4

0 0

2 0

Sample Output

3.500

HINT

3.5, 3.50, 3.500, … 中的任何一个输出均为正确。此外,3.49, 3.51,

3.499999,…等也都是可被接受的输出。

【数据范围】

100%的数据保证,对于 i = 1, 2, .., n, 第 i 个房子的坐标(xi, yi)为整数且

–1,000,000 ≤ xi, yi ≤ 1,000,000. 任何三个房子不在同一条直线上,任何四个房子不

在同一个圆上;

40%的数据,n ≤ 100;

70%的数据,n ≤ 500;

100%的数据,3 ≤ n ≤ 1,500。

一道神奇的思路题。

直接枚举三点计算肯定是不行的。

三点确定一圆,考虑再加入一个点,这个四边形一共会形成四种圆,每种圆肯定会包含构成这个圆的三个点。

①如果这四个点构成的是凹四边形:

四种圆中除了在圆上的三点之外,只有一种圆会包含剩余一个点,所以一个凹四边形对答案贡献为1。

②构成的是凸多边形:

四种圆中有两种圆会包含剩余的一个点(被包含的点分别是对角和大于180°的两个点),因此一个凸四边形对答案的贡献为2。

最终的期望就是3+凹四边形个数+2?凸四边形个数(n3)

凸四边形个数+凹四边形个数=(n4)

考虑如何计算凹四边形个数:

枚举凹四边形的凹点x,并以他作为极点对其他点按照极角排序,(n?13)?凸四边形就是答案,再按照极角序枚举一个点y,从与他的角度小于180°中的点选两个点就是x,y与其他点构成的凸四边形个数。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Pi acos(-1)
#define LL long long
#define M 2005
using namespace std;
struct Point
{
    double x,y;
}p[M];
double a[M*2];
int n;
LL C(int n,int m)
{
    LL ans=1;
    for (int i=1;i<=m;i++)
        ans=1LL*ans*(n-i+1);
    for (int i=2;i<=m;i++)
        ans/=i;
    return ans;
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        scanf("%lf%lf",&p[i].x,&p[i].y);
    LL t=0;
    for (int i=1;i<=n;i++)
    {
        int tot=0;
        for (int j=1;j<=n;j++)
            if (j!=i)
            {
                a[++tot]=atan2(p[j].y-p[i].y,p[j].x-p[i].x);
                if (a[tot]<0)
                    a[tot]+=Pi*2;
            }
        sort(a+1,a+1+n-1);
        for (int j=1;j<n;j++)
            a[n-1+j]=a[j]+2*Pi;
        LL x=0;
        int now=1;
        for (int j=1;j<n;j++)
        {
            while (now<(n-1)*2&&a[now+1]-a[j]<Pi)
                now++;
            if (now-j>1)
                x=x+C(now-j,2);
        }
        t=t+C(n-1,3)-x;
    }
    double ans=(double)(t+(C(n,4)-t)*2)/C(n,3)+3;
    printf("%.6lf\n",ans);
    return 0;
}

时间: 2024-10-10 07:53:08

【BZOJ 1913】 [Apio2010]signaling 信号覆盖的相关文章

BZOJ1913: [Apio2010]signaling 信号覆盖

1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1502  Solved: 615[Submit][Status][Discuss] Description Input 输入第一行包含一个正整数 n, 表示房子的总数.接下来有 n 行,分别表示 每一个房子的位置.对于 i = 1, 2, .., n, 第i 个房子的坐标用一对整数 xi和yi来表 示,中间用空格隔开. Output 输出文

【bzoj1913】 Apio2010—signaling 信号覆盖

http://www.lydsy.com/JudgeOnline/problem.php?id=1913 (题目链接) 题意 给出一个平面上n个点,求任选3个点画一个圆所包含的点的期望值. Solution 这个问题可以转化为凹凸多边形的问题求解(当然我是没想到的)..左转题解:http://blog.csdn.net/regina8023/article/details/45556321 细节 注意存放极角的数组要开成2倍. 代码 // bzoj1913 #include<algorithm>

【BZOJ1913】[Apio2010]signaling 信号覆盖

题意:一个平面上n个点,随机选3个点构成一个圆,问期望有多少个点在这个圆内.数据保证没有4点共圆.3点共线和重点. 认为比较难想到 因为是等概率选择,所以只要求所有情况包含的点总数 在所有C(n, 3)种情况中,每个被圆包含的点都可以对应到一个四边形上 因此求出凸四边形和凹四边形的个数就可以算出答案 1.对于凸四边形有两种方法可以包含4个点 2.对于凹四边形只有一种方法可以包含4个点 ans = (2 * Q + P) / C(n, 3) + 3 #include <cstdio> #incl

斜率优化专题4——bzoj 1911: [Apio2010] 特别行动队 题解

[原题] 1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 2134  Solved: 911 [Submit][Status] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT [分析]只要跟着我前面的题目走,这道题真的是太水了.神马题解都不用参考,公式随便推. 易知方程是f[i]=max(f[j]+

联想全球总部(北京)地下停车场FM调频广播信号覆盖系统顺利开通运行

联想总部办公大楼联想全球总部新园区位于北京中关村软件园,总建筑面积22万平方米,可同时容纳10000多名员工办公.联想集团全球总部的运营管理和研发部门入驻新园区.新园区地下停车场共两层,近1000个停车位,本次将5套FM广播信号引入地下停车场.车辆驶入停车场内,可清楚地听到87.6MHz.88.7MHz.97.4MHz.103.9MHz.106.6MHz等5套FM广播信号,系统最终可扩容至20套光信号覆盖.此系统由接收天线.数字选频器.光纤拉远系统.微蜂窝直放站.发射天线等组成,目前系统已经开通

机场地下停车场FM广播信号覆盖

(北京恒星科通科技发展有限公司http://www.bjhxkt.com010-82565576 13810952040)一.高铁站地下停车场FM广播信号覆盖系统概述21世纪之交对中国而言,是一个大变革大发展大融合的年代,中国的汽车工业飞速前进,随着人民生活水平的提高,汽车由政府部门和权贵象征走入千家万户,逐步成为工薪阶层的代步工具.由于城市土地资源的宝贵和紧缺,地下停车场如雨后春笋应运而生,成为机场.火车站.商场.写字楼.居民区和企事业单位不可或缺的配套建筑,地下停车场设计越来越先进,规模越来

高铁站地下停车场FM广播信号覆盖方案

(北京恒星科通科技发展有限公司http://www.bjhxkt.com010-82565576 13810952040)一.高铁站地下停车场FM广播信号覆盖系统概述21世纪之交对中国而言,是一个大变革大发展大融合的年代,中国的汽车工业飞速前进,随着人民生活水平的提高,汽车由政府部门和权贵象征走入千家万户,逐步成为工薪阶层的代步工具.由于城市土地资源的宝贵和紧缺,地下停车场如雨后春笋应运而生,成为机场.火车站.商场.写字楼.居民区和企事业单位不可或缺的配套建筑,地下停车场设计越来越先进,规模越来

BZOJ 2823 AHOI 2012 信号塔 凸包+最小圆覆盖

题目大意:给出平面上n个点,求最小圆覆盖. 思路:圆覆盖问题只与所有点中凸包上的点有关,因此先求一下凸包,然后数据范围骤减.大概是只剩下logn左右个点.这样就可以随便浪了. 先找所有三个点组成的圆,然后找两个点为直径所组成的圆. 还有就是三角形的外心公式,简直不是人推的,然后我就机制的百度了,结果如下: 不要模拟退火... 样例很坑,当你算出2.49 2.86的时候,不要认为你被卡精了,其实是你写挂了... CODE: #include <cmath> #include <cstdio

BZOJ 3564 SHOI 2014 信号增幅仪 坐标变换+最小圆覆盖

题目大意:给出平面上的一些点,现在让你用一个长轴与x轴成一定角度的,长轴:短轴已知的椭圆来覆盖所有的坐标,求最小的短轴长度. 思路:很明显,这个椭圆的形状和放置状态已经给出了,但是没有办法求最小拖圆覆盖啊.采用坐标变换,将椭圆变成圆.首先我们先让长轴与x轴平行,将平面上的所有点都旋转这个角度.之后只需要让所有点的x坐标除以长轴:短轴就可以了.剩下的就是最小圆覆盖了. 注:坐标旋转公式: x' = x * cos(a) - y * sin(a) y' = x * sin(a) + y * cos(