题目

Description

终其一生,我们在寻找一个原谅。
犯下了太多错,要原谅的那个人,永远都是自己。
Samjia在深夜中望见了没有边界的人生,他没有想到过自己犯下了这么多的错误,他想在他的一生中寻求一个原谅。
他的人生是一个没有边界的平面,平面上有n个错误,每个错误是一个点,每个点i有一定的坐标(x[i],y[i]),有一个参数p 表示每个点有p的概率出现在平面上,注意两个不同的点的出现互相没有影响,Samjia可以在两个点之间连一条线段,两条线段不能在除了端点以外的地方相交,现在Samjia想知道他最多可以连的线段数的期望。
温馨提示:请看最后面的提示:)
本题的答案在mod 100000007意义下计算

Input

第一行两个正整数n和p表示平面上有n个点以及每个点出现概率为p
接下来n行第i行两个实数x[i]和y[i]表示一个点的坐标
保证不存在三点共线

Output

一行一个正整数表示Samjia最多可以连的线段数的期望

Sample Input

3 10000001
0 1
1 0
0 0

Sample Output

39000003
样例说明:
数据中的p为0.3
1×3×(0.3×0.3×0.7)+3×0.3×0.3×0.3=0.27
贡献为1的情况有三种
贡献为3的情况有一种

Data Constraint

对于20%的数据,p=1,1<=n<=5
对于40%的数据,p=1,1<=n<=1000
对于70%的数据,1<=n<=200
对于100%的数据,1<=n<=1000
坐标的绝对值小于等于10^4
保证0<=p<100000007

Hint

欧拉公式
在一个平面图内,设点数为V,边数为E,有界面数为F
一定满足:V+F-E=1

题解

设有 V 个点,E 条边,凸包上有 k 个点,有 F 个有界面
那么由V+F-E=1① 2*E=3 *F+K②可得:
E=3×V-k-3
我们现在要求的是期望边数,根据上面的公式就可以转化为
3*(期望的点数)-期望的凸包上的边数-3
而这三项显然是可以分开计算的,我们分开考虑
对于期望的点数,我们可以发现期望的和就等于n*p,所以我们现在考虑第二项怎么求
对于每一条边,它的贡献就是出现在凸包上的期望,所以我们可以这样做:
枚举一个点,并以这个点为O点建立坐标系,并进行一次极角排序
然后我们顺次枚举其他的边,现在我们要考虑的就是什么时候这一条边会作为凸包上的一条边出现在图中
首先在当前在做的向量的下面的点是一个都不可以选的,然后两个端点一定要选,上面的随便选不选,这样我们就能把这条边的贡献算出来了
然后我们可以用一条扫描线来找在当前线段上面的点的数量

贴代码

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define db double
#define ll long long
using namespace std;
const int maxn=10005,md=100000007;
struct node{db x,y,z;
}a[maxn],b[maxn];
int i,j;
ll p,ans,c,ge,nt,k,n;
ll cc[maxn];
int cmp(node x,node y){return x.z<y.z;
}
bool check(node x,node y){return x.x*y.y>x.y*y.x;
}
int main(){freopen("forgive.in","r",stdin);freopen("forgive.out","w",stdout);scanf("%d%d",&n,&p);for (i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);cc[0]=1;c=(p*p)%md;for (i=1;i<=n;i++) cc[i]=(cc[i-1]*(1-p+md))% md;ans=3*(n*p+cc[n])-3;ans=ans%md;nt=n-1;for (i=1;i<=n;i++){for (j=1;j<=n;j++){b[j].x=a[j].x-a[i].x;b[j].y=a[j].y-a[i].y;b[j].z=atan2(b[j].y,b[j].x);if (i==j) b[i].z=21474844;}sort(b+1,b+n+1,cmp);k=1;ge=0;for (j=1;j<=nt;j++){while (check(b[j],b[k%nt+1])) {ge++;k=k%nt+1;}ans=(ans-(cc[n-ge-2]*c)%md+md)% md;if (ge) ge--; else k=k%nt+1;}}printf("%d",ans);return 0;
}

【NOI2017模拟3.30】原谅相关推荐

  1. (原创)7-1 银行业务队列简单模拟 (30 分)

    设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列 ...

  2. JZOJ 5939. 【NOIP2018模拟10.30】阻击计划

    Description 最近,小J发现小R和小Z之间的关系十分密切,心中十分嫉妒,为了拆散他们,小J经常扰乱他们一起玩耍的计划. 问题描述 小R和小Z打算在这个周末一起骑车在G国的城市看风景,G国的城 ...

  3. JZOJ5939. 【NOIP2018模拟10.30】阻击计划

    Description 最近,小J发现小R和小Z之间的关系十分密切,心中十分嫉妒,为了拆散他们,小J经常扰乱他们一起玩耍的计划. 问题描述 小R和小Z打算在这个周末一起骑车在G国的城市看风景,G国的城 ...

  4. [多校 NOIP 联合模拟 11.30 T4] ZZH 的旅行(李超树合并) | 错题本

    文章目录 题目 分析 代码 题目 给一棵第 iii 条边边权为 did_idi​ 的有根树,111 为根.对于每个点 xxx,对于满足如下条件的序列 {s1,⋯,sk}\{s_1,\cdots,s_k ...

  5. 【NOI2017模拟4.2】押韵

    题目 Description 小A非常喜欢所有押韵的东西,他认为两个单词押韵当且仅当他们的公共后缀的长度和两个单词中最长的单词的长度相等,或者是最长的单词的长度减一.也就是说LCS(A,B)>= ...

  6. JZOJ-senior-5937. 【NOIP2018模拟10.30】斩杀计划

    Time Limits: 1000 ms Memory Limits: 262144 KB Description 众所周知,小J和小G是死对头,一天小G带领一群小弟找到了小J. 小G有n个小弟,第i ...

  7. 3712. 【NOI2014模拟6.30】石中剑的考验(sword)

    Description 小X 最近看了亚瑟王的传说,幻想自己也能成为这样的传奇人物. 在梦中,小X 看到前方由近及远有n 个高度互不相同且均为整数的台阶,其中最矮的高度为1,最高的高度为n. 小X 隐 ...

  8. JZOJ 5938. 【NOIP2018模拟10.30】分离计划

    Description 众所周知,小Z拥有者足以毁灭世界的力量,可惜他不能控制这份力量,小J和小Z的关系十分亲密,一天小J预感到了小Z体内的力量将要爆发. 这次爆发的力量比以往都要强大,以至于将小Z分 ...

  9. JZOJ 5192. 【NOI2017模拟7.2】容器

    Description Input Output Sample Input 样例一:3 2 1 样例二:15 6 4 Sample Output 样例一:10 样例二:458177764 Data C ...

  10. JZOJ 5186. 【NOIP2017提高组模拟6.30】tty's home

    Description Input Output Sample Input input 1: 5 1 1 1 1 1 1 2 2 3 3 4 4 5 input 2: 5 0 1 0 1 0 1 2 ...

最新文章

  1. 读取 Radio 的值
  2. mysql分片库分页查询_准备开发一个数据库分片的中间件,请问下分页查询用什么样的算法效率较高?...
  3. ipython下怎么运行py文件_在IPython中执行Python程序文件的示例
  4. python窗体应用程序无阻塞_当GUI应用程序运行时,imshow阻塞线程
  5. 安卓开发3d模型展示源码_玩具模型样品3D打印,让玩具开发无限可能
  6. 无显示器u盘安装centos_无光驱情况下,U盘启动安装CentOS (实测 笔记)
  7. HDU3789 奥运排序问题【序列处理】
  8. Android AIDL
  9. PLSQL导出表结构和数据
  10. 使用selenium爬验证码图片并识别
  11. 透过CES看国产手机市场变动 “中华酷联”要调位
  12. java创建临时文件
  13. 在Ubuntu 8.10 中安装使用新一代输入法ibus Deb包下载_Ubuntu,Linux,ibus输入法,拼音,五笔,搜狗
  14. P4238 【模板】多项式求逆
  15. 去除硬盘安全删除硬件图标
  16. 常用DOS命令之通俗易懂篇
  17. 网页上跳转直接添加QQ好友、加入QQ群
  18. 数字化医院中智慧医疗的具体应用
  19. “坝上”到底在哪里?
  20. Flutter 里的语法糖解析,知其所然方能潇洒舞剑,10天用Flutter撸了个高仿携程App

热门文章

  1. C#开源组件之Word文件的操作:一
  2. android:一套默认头像的封装
  3. mysql交并补_集合交并补运算顺序是什么?
  4. node.js之async的使用(series,whilst)
  5. 有没有一款桌面便签软件,可以手机电脑都能使用的?
  6. html 出现脚本错误,当前页面脚本发生错误,教您当前页面脚本发生错误的解决方法...
  7. 入职百度-念念不忘,必有回响
  8. java -jar -xx_java 启动方式 java -jar xx.jar
  9. WARNING: disk usage in log directory [/home/.../.ros/log] is over 1GB. 问题解决办法
  10. 阿里云OSS跨域设置