CF Hello 2020 E.New Year and Castle Construction
E.New Year and Castle Construction
题意
给定n个点,对于每个点\(p\),求出4-point 子集(该子集有四个点,并且围成的圈包含\(p\))的个数
数据给的点中没有三点共线的情况
这个题的题意并不是很好理解,补题过后还发现自己理解的题解是有问题的。
分析
四个点围成一个圈,第5个点在其中。所以总方案数为\(n*C_{n-1}^4\),枚举中间那个点,然后从剩余的(n-1)个点中选剩余的四个点。
考虑\(n^2\)的做法,正向枚举所有方案中可行的方案并不是很合适,因为要考虑更大的子集的情况,所以反向枚举。
不合法的方案:其他的四个点并不能包含点\(p\)。枚举这四个点中的其中一个点\(q\),计算取剩余3个点的方案数。考虑\(p\)与\(q\)连成的直线,可以从这条直线某一侧取出三个点,可以发现这样的组合一定不会使得四个点构成的圈包含\(p\)。
如何不重不漏的删除所有不合法的方案?对于每个\(p\),\(q\)作为四个点中,与\(p\)连线斜率最小的那个点,然后在这样的基础上,只能从\(pq\)连线一侧拿另外三个点。可以想到这样的方案对于\(p\)来讲是没有重复的。而\(p\)的枚举又是独立的,所以可以补充不漏的删除所有方案。
const int N = 3005;
long double x[N],y[N];
int main()
{
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
cin >> x[i] >> y[i];
}
ll res = 1ll * n * (n-1) * (n-2) * (n-3) * (n-4) / 24;
long double pi = acos(-1.0L);
for(int i=1;i<=n;i++){
vector<long double> v;
for(int j=1;j<=n;j++){
if(i == j)continue;
v.push_back(atan2(y[j]-y[i],x[j]-x[i]));
}
sort(v.begin(),v.end());
int m = n-1,index = 0;
for(int j=0;j<m;j++){
while(index < j + m){
long double ang = v[index%m] - v[j];
if(ang < 0) ang += 2 * pi;
if(ang < pi)index ++;
else break;
}
ll cnt = index - j - 1;
res -= 1ll * cnt * (cnt - 1) * (cnt - 2) / 6;
}
}
cout << res << endl;
return 0;
}
参考链接
B站up主:https://www.bilibili.com/video/av82161298?p=411
ps:题解有些许啰嗦,up主视频中讲解的很清楚,然后我对这个解法的正确性进行了一些额外的思考,表达能力欠佳,如果读者发现描述中有不准确或者不理解的地方,烦请在下面留言,谢谢!在最后非常感谢B站up主qscqesze的讲解。
CF Hello 2020 E.New Year and Castle Construction的更多相关文章
- codeforces 1284E. New Year and Castle Construction(极角排序+扫描枚举)
链接:https://codeforces.com/problemset/problem/1284/E 题意:平面上有n个点,问你存在多少组四个点围成的四边形 严格包围某个点P的情况.不存在三点共线. ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- reactjs入门到实战(十)----one-first_app
index <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- ...
- Codeforces Hello2020 A-E简要题解
contest链接:https://codeforces.com/contest/1284 A. New Year and Naming 思路:签到,字符串存一下,取余拼接. #include< ...
- 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...
- CF Grakn Forces 2020 1408E Avoid Rainbow Cycles(最小生成树)
1408E Avoid Rainbow Cycles 概述 非常有趣的题目(指解法,不难,但很难想) 非常崇拜300iq,今天想做一套div1时看见了他出的这套题Grakn Forces 2020,就 ...
- ASP.NET Core搭建多层网站架构【9.2-使用Castle.Core实现动态代理拦截器】
2020/01/31, ASP.NET Core 3.1, VS2019, Autofac.Extras.DynamicProxy 4.5.0, Castle.Core.AsyncIntercepto ...
- 开始是为了结束,结束是新的开始——NOI 2020 游记
Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...
- Castle Core 4.0.0 alpha001发布
时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...
随机推荐
- 【递归】P1157组合的输出
题目相关 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且 r ≤n),我们可以简单地将n个元素理解为自然数1,2,-,n从中任取r个数. 现要求你输出所有组合. ...
- Solon rpc 之 SocketD 协议 - RPC鉴权模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- 4.k8s存储之Volume、PV、PVC和StatefulSet
3.Volume 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的 ...
- Java API 操作HBase Shell
HBase Shell API 操作 创建工程 本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse. 然后创建Java项目名字叫hbase-test 配置运行环境 ...
- xtrabackup不完全恢复
例如,在2014年6月26日下午14:00的时候有人误操作drop掉了一张表,由于库不是很大,并且为测试库,并没有访问,这个时候,我们可以进行基于位置和时间点的不完全恢复 先找到早上的备份,查看那xt ...
- Sqli - Labs 靶场笔记(一)
Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...
- kafka(一)入门
一.消息引擎系统 这类系统引以为豪的消息传递属性,像引擎一样,具备某种能量转换传输的能力 消息引擎系统是一组规范,企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递.通俗地讲 ...
- uni-app开发经验分享二: uni-app生命周期记录
应用生命周期(仅可在App.vue中监听) 页面生命周期(在页面中添加) 当页面中需要用到下拉刷新功能时,打开pages.json,在"globalStyle"里设置"e ...
- SUGA
愿试炼的终点是花开万里 愿以渺小启程伟大结束 ----闵玧其
- ProBuilder快速原型开发技术 ---ProBuilder基础操作
在游戏开发.虚拟现实等三维仿真领域,Unity目前是国内外最为知名的开发引擎.随着版本的不断提升与完善,目前Unity2020等最新版本,又增加了很多令人惊奇的功能. Unity内置的ProBuild ...