E.New Year and Castle Construction

题意

给定n个点,对于每个点\(p\),求出4-point 子集(该子集有四个点,并且围成的圈包含\(p\))的个数

数据给的点中没有三点共线的情况

这个题的题意并不是很好理解,补题过后还发现自己理解的题解是有问题的。

分析

  1. 四个点围成一个圈,第5个点在其中。所以总方案数为\(n*C_{n-1}^4\),枚举中间那个点,然后从剩余的(n-1)个点中选剩余的四个点。

  2. 考虑\(n^2\)的做法,正向枚举所有方案中可行的方案并不是很合适,因为要考虑更大的子集的情况,所以反向枚举。

  3. 不合法的方案:其他的四个点并不能包含点\(p\)。枚举这四个点中的其中一个点\(q\),计算取剩余3个点的方案数。考虑\(p\)与\(q\)连成的直线,可以从这条直线某一侧取出三个点,可以发现这样的组合一定不会使得四个点构成的圈包含\(p\)。

  4. 如何不重不漏的删除所有不合法的方案?对于每个\(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的更多相关文章

  1. codeforces 1284E. New Year and Castle Construction(极角排序+扫描枚举)

    链接:https://codeforces.com/problemset/problem/1284/E 题意:平面上有n个点,问你存在多少组四个点围成的四边形 严格包围某个点P的情况.不存在三点共线. ...

  2. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  3. reactjs入门到实战(十)----one-first_app

    index <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- ...

  4. Codeforces Hello2020 A-E简要题解

    contest链接:https://codeforces.com/contest/1284 A. New Year and Naming 思路:签到,字符串存一下,取余拼接. #include< ...

  5. 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...

  6. CF Grakn Forces 2020 1408E Avoid Rainbow Cycles(最小生成树)

    1408E Avoid Rainbow Cycles 概述 非常有趣的题目(指解法,不难,但很难想) 非常崇拜300iq,今天想做一套div1时看见了他出的这套题Grakn Forces 2020,就 ...

  7. 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 ...

  8. 开始是为了结束,结束是新的开始——NOI 2020 游记

    Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...

  9. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

随机推荐

  1. 死磕以太坊源码分析之state

    死磕以太坊源码分析之state 配合以下代码进行阅读:https://github.com/blockchainGuide/ 希望读者在阅读过程中发现问题可以及时评论哦,大家一起进步. 源码目录 |- ...

  2. Java springboot支付宝小程序授权,获取用户信息,支付及回调

    参考官方文档https://opendocs.alipay.com/mini/introduce/pay 支付宝小程序的支付和微信小程序的支付一样第一步都是要获取到用户的唯一标识,在微信中我们获取到的 ...

  3. Docker学习笔记之查看Docker

    命令: 使用history命令查看镜像历史 使用cp命令复制容器中的文件到主机 使用commit命令把修改过的容器创建为镜像 使用diff命令检查容器文件的修改 使用inspect命令查看容器/镜像详 ...

  4. 【Oracle】dump函数用法

    Oracle dump函数的用法 一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全 ...

  5. 设计一款兼容ST207和GD207的开发板

    在MCU的学习中,大部分人都是学习别人的开发板,例如正点原子.野火等,优点是有可靠的教程和代码,缺点是容易让人有种自己全部都学会的了错觉,听了课程编写了代码,运行正常. 这个时候,可以尝试自已做一块属 ...

  6. Xctf攻防世界—crypto—Normal_RSA

    下载压缩包后打开,看到两个文件flag.enc和pubkey.pem,根据文件名我们知道应该是密文及公钥 这里我们使用一款工具进行解密 工具链接:https://github.com/3summer/ ...

  7. sap的内核升级,修补了源代码保护的方式

    众所周知,在SAP的内核位701或者之前的版本中,我们可以通过向源代码的中加入"*@#@@[SAP]"这样的代码,来实现对源代码的保护.但是在内核升级到721和以后的版本中,你会发 ...

  8. Description Resource Path Location Type Failure to transfer org.apache.maven.plugins:maven-surefire-

    url:https://www.pianshen.com/article/8003307916/ Description Resource Path Location Type Failure to ...

  9. Nacos 服务配置中心

    1.因为项目是微服务分布式项目,每个微服务都需要用到配置中心,所以第一步我们先在common中添加相应的依赖 <dependency> <groupId>com.alibaba ...

  10. Django前后端分离项目部署

    vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...