Problem A: 踢罐子 解题报告
Problem A: 踢罐子
Description
平面上有\(n\)个点,其中任意2点不重合,任意3点不共线。
我们等概率地选取一个点A,再在剩下的\(n-1\)个点中等概率地选取一个点B,再在剩下的\(n-2\)个点中等概率地选取一个点C。
然后我们计算伤害倍率\(d\)。作ABC外接圆,每一个位于弧BC和线段BC之间的点计1倍,每一个位于弧BC上的点(包括B,C两点)计1/2倍,特别的,点A计1倍。将这些倍率全部加起来得到伤害倍率\(d\)。
注意:弧BC是指,ABC外接圆上B到C而不包含点A的部分,这个弧不一定是劣弧。
给定这\(n\)个点的坐标,你需要求出\(d\)的期望。为了简单起见,你只需要输出\(d\times n\times (n-1)\times (n-2)\times 2\)的值,可以看出这是一个整数。
Input
第一行一个正整数\(n\)
接下来\(n\)行,每行2个整数\(x, y\),空格分隔,表示一个坐标。
Output
仅一行,一个数,表示\(d\times n\times (n-1)\times (n-2)\times 2\)的值。
HINT
对于40%的数据,n<=20。
对于60%的数据,n<=50。
对于80%的数据,n<=200。
对于100%的数据,3<=n<=1000。
对于100%的数据,xi和yi的绝对值不超过2000000000。
暴力需要求圆心,最后选择了列圆的方程高斯消元解的诡异办法,wjyyy神仙给出了一个向量的做法还没仔细看...
事实上这个题感觉思路不太自然。
先把处于顶点的贡献算好是\(4n(n-1)(n-2)\)。
然后四个点四个点讨论
发现如果四个点是凸边形,那么这四个点贡献8,否则不产生贡献。
问题转化成统计凸四边形个数了。
凸四边形两两连边后有4条边剩下两个点在异侧,2条边同侧
而凹的3异3同
可以先统计X个异侧,Y个同侧,然后列方程解凸四边形个数
统计的时候枚举一个点,然后极角排序另一个就可以了。
Code:
#include <cstdio>
#include <algorithm>
#include <cmath>
#define ll long long
const int N=2010;
const double pi=acos(-1);
int n,tot;ll X,Y;
double dx[N],dy[N],s[N];
ll cal(ll x){return x*(x-1)/2;}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf%lf",dx+i,dy+i);
for(int i=1;i<=n;i++)
{
tot=0;
for(int j=1;j<=n;j++)
{
if(i!=j)
{
s[++tot]=atan2(dy[j]-dy[i],dx[j]-dx[i]);
if(s[tot]<0) s[tot]+=pi*2;
}
}
std::sort(s+1,s+1+tot);
for(int j=1;j<=tot;j++) s[j+tot]=s[j]+2*pi;
for(int j=1,k=1;j<=tot;j++)
{
while(k<=tot*2&&s[k]-s[j]<=pi) ++k;
int c1=k-j-1,c2=n-c1-2;
X+=1ll*c1*c2;//异
Y+=cal(c1)+cal(c2);//同
}
}
printf("%lld\n",(Y-X)*2+4ll*n*(n-1)*(n-2));
return 0;
}
2018.12.31
Problem A: 踢罐子 解题报告的更多相关文章
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ACM: A Simple Problem with Integers 解题报告-线段树
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...
- BestCoder18 1002.Math Problem(hdu 5105) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5105 题目意思:给出一个6个实数:a, b, c, d, l, r.通过在[l, r]中取数 x,使得 ...
- Problem - 433C - Codeforces解题报告
对于这题本人刚开始的时候的想法是:先把最大两数差的位置找到然后merge计算一个值再与一连串相同的数做merge后计算一个值比较取最大值输出:可提交后发现不对,于是本人就搜了一下正解发现原来这题的正确 ...
- Problem A: 选举 解题报告
Problem A: 选举 题意 给出一个投票过程.有\(n\)个选民和\(m\)个候选人,每个选民\(i\)有个不重且有序的可投集合\(\{a_i\}\). 对于第一轮投票,选民\(i\)会投给\( ...
- Problem A: 种树 解题报告
Problem A: 种树 Description 很久很久以前,一个蒟蒻种了一棵会提问的树,树有\(n\)个节点,每个节点有一个权值,现在树给出\(m\)组询问,每次询问两个值:树上一组点对\((x ...
- Problem C: 多线程 解题报告
Problem C: 多线程 Description 多线程是一种常见的加速手段,利用多个线程同时处理不同的任务可以一定程度上减少总耗时,达到提高效率的目的.然而,多个线程间的执行顺序是完全不可控的, ...
- Problem B: 专家系统 解题报告
Problem B: 专家系统 Description 一个专家系统是指,你雇佣了\(n\)个专家,他们每个人会做出一个结果,然后你从中选取较多的专家的结果组合而成最终的结果.专家系统广泛应用于传统机 ...
- Problem C Dist 解题报告
Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...
随机推荐
- 【LeeCode88】Merge Sorted Array★
1.题目描述: 2.解题思路: 题意:两个由整数构成的有序数组nums1和nums2,合并nums2到nums1,使之成为一个有序数组.注意,假设数组nums1有足够的空间存储nums1和nums2的 ...
- 20155202 张旭《网络对抗》Exp2 后门原理与实践
20155202 张旭<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 捆绑在软件中 注入在可执行文件里 注入在office文件的宏里面 ...
- 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践
基础问题回答 (1)杀软是如何检测出恶意代码的? 答:分析恶意程序的行为特征,分析其代码流将其性质归类于恶意代码. (2)免杀是做什么? 答:一般是对恶意软件做处理,让它不被杀毒软件所检测,也是渗透测 ...
- 阿里云代金券 - 双12疯了~~~ 4核8G 3M带宽只要1890元/3年
阿里云双12大促简直疯了,4核8G 3M带宽只要1890元/3年,比双11疯狂多了,双11没有上车的赶快来买吧!!! 前去阿里云双12活动页面 截图如下: 从截图中可以看出,不仅4核8G降到了地板,1 ...
- WordPress留言本插件推荐
WordPress不借助于任何插件也可以做个留言本,那就是建个 Page, 直接使用它的评论功能即可,而且给评论加上 Ajax 功能.WYSIWYG.引用.回复.留言分页等功能也可以做的很漂亮.但对于 ...
- Eclipse中Maven插件配置
1. Maven插件配置 http://www.blogjava.net/fancydeepin/archive/2012/07/13/eclipse_maven3_plugin.html 2. Ma ...
- 基于RapidJSON的操作库
需要安装配置RapidJSON库 /******************************************************************* * summery: 提供便 ...
- NodeJS旅程 : express - nodejs MVC 中的王牌
express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...
- spring cloud资料汇总
https://www.cnblogs.com/Java3y/p/9540386.html#commentform --非常好的文章,里面还有海量学习资料
- docker 学习笔记(2)--doucker file命令
FROM base ---- imageRUN ---- 执行命令ADD ---- 添加文件COPY ---- 拷贝文件CMD ...