HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A
题目意思大致为由n个点(n小于100)和m个金矿(m小于1000),对于任意n点中每三个点都不会共线,对于n个点中每三个点构成的三角形中,金矿落在其中的个数为奇数时,这是符合题意的三角形,求共有多少个三角形满足题意。
据说暴力枚举所有三角形然后枚举每个点是不是在其中(复杂度10^9)是可以过的,但不是正解。
下面给出幻神的精彩思路:对于每两个点(复杂度n^2),枚举每一个点是不是在他们的下面,这个预处理的复杂度是10^7,得到每条边的下面的点的个数。然后枚举每三个三角形,对于这个三角形的,比方说,i,j,k按照它们的x坐标升序排列,且j点在edge(i,k)上,那么只要edge(i,j)边下的点的数目加上edge(j,k)边下的数目减去edge(i,k)边下的数目就是在这个三角形内的点的个数;另外如果j点在edge(i,k)下,那么只要反过来相减就可以了。综上,只要升序以后,取绝对值即可。另外的一个技巧是,只要给n个点按照x坐标的大小排序一下,代码写起来就会非常方便。但是这里有个坑点,因为边的权值是10的5次方级别的,所以在使用叉积判断点是否在边下的时候可能会爆int!所以做一题绝对不能大意啊- 。-
AC代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <math.h> 5 using namespace std; 6 typedef long long ll; 7 8 int cnt[105][105]; 9 struct point 10 { 11 int x,y; 12 bool operator < (const point & A)const 13 { 14 return x<A.x; 15 } 16 }p[1300]; 17 18 ll cross(point a,point b,point c) 19 { 20 ll x1=(ll)b.x-a.x; 21 ll y1=(ll)b.y-a.y; 22 ll x2=(ll)c.x-a.x; 23 ll y2=(ll)c.y-a.y; 24 return x1*y2-y1*x2; 25 } 26 int main() 27 { 28 int n,m; 29 int kase=0; 30 while(scanf("%d%d",&n,&m)==2) 31 { 32 memset(cnt,0,sizeof(cnt)); 33 for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y); 34 for(int i=1;i<=m;i++) scanf("%d%d",&p[i+n].x,&p[i+n].y); 35 36 sort(p+1,p+1+n); 37 for(int i=1;i<=n-1;i++) 38 for(int j=i+1;j<=n;j++) 39 for(int k=n+1;k<=n+m;k++) 40 { 41 if(p[j].x>p[k].x&&p[k].x>p[i].x && cross(p[i],p[j],p[k])<0) cnt[i][j]++; 42 } 43 44 int ans=0; 45 for(int i=1;i<=n-2;i++) 46 for(int j=i+1;j<=n-1;j++) 47 for(int k=j+1;k<=n;k++) 48 { 49 int t=abs(cnt[i][j]+cnt[j][k]-cnt[i][k]); 50 if(t&1) ans++; 51 } 52 printf("Case %d: %d\n",++kase,ans); 53 } 54 return 0; 55 }
另外有仓鼠学长的思路是,枚举三边,上面的两边的下面和下面一边的上面存在的点取个交集就是这个三角形内部的点的个数,,觉得不如幻神的思路来得好,而且觉得写起来也麻烦,不过作为一种思路记下来总是好的- 。-
转载于:https://www.cnblogs.com/zzyDS/p/5475465.html
HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)相关推荐
- HDU 4380 Farmer Greedy 计算几何+bitset
枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数.用bitset记录. 然后三角形就是3个bitset&一下 #include <cstdio> #include ...
- 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
牛客寒假算法集训营2 https://ac.nowcoder.com/acm/contest/327/A A.处女座的签到题 题目描述 平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多 ...
- java求sin函数咋写_5类“隐含条件”,题干不写但是你要会用(解三角形知识整合,建议收藏)| 真题精讲-16...
有的题目本身蕴含了一些*不言自明.无需特别指明*的条件,对于「解三角形」这个板块而言,这种隐藏条件一共有五条. # 先发个福利:我为你准备了全国各个省份5年高考数学真题的精排版讲义:< 121套 ...
- hdu 5312 Sequence(数学推导——三角形数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others) ...
- java知识体系综合面试题
目录 一.基础知识 二.JVM知识 三.开源框架知识 四.操作系统 五.多线程 六.TCP与HTTP 七.架构设计与分布式 八.算法 九.数据库知识 十.消息队列 十一.缓存 十二.搜索 一.基础知识 ...
- 实时数仓+知识图谱综合解决方案-首款图数仓AbutionGraph的行业落地报告PPT
AbutionGraph是北京图特摩斯科技研发的一款物联网级的大数据通用图数据库,使知识图谱技术不仅仅局限与关联关系存储的场景,我们可以把其应用到金融风控.车联网.智慧城市(传感器采集监控)等等要求高 ...
- 关于Java基础部分知识的综合应用之成员调度系统的项目
好久没更新了,咱继续 这是view package windows;import service.SunmmaryOperation1; import service.SunmmaryOperatio ...
- 牛客网 小白赛4 A三角形【贪心】
[前驱]:在指定长度的棍子中找到能组成最大周长三角形的三根棍子 链接:https://www.nowcoder.com/acm/contest/134/A 来源:牛客网 题目描述 铁子从森林里收集了n ...
- 牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
题目链接:点击查看 题目大意:在平面直角坐标系中给出一只手的轮廓,需要判断是左手还是右手 题目分析:因为这些点在给出时不能确定时顺时针还是逆时针给出,所以我们需要自己来判断,这里存一下给出三点判断顺时 ...
最新文章
- Flutter 初学者的简单例子充分解释
- UML大战需求分析阅读笔记——02
- 【机器视觉】 dev_update_var算子
- SAP UI5 应用开发教程之十 - 什么是 SAP UI5 应用的描述符 Descriptor
- 【软件测试】黑盒测试の场景测试法
- [深度学习-实践]CycleGAN的入门例子-Tensorflow2.1-keras
- C++ Make、Makefile、CMake和CMakeLists关系
- oracle服务器客户端配置文件,服务器 oracle 客户端配置文件
- 夜弦网页游戏专用浏览器(支持最小化隐藏后台多开挂机)
- java编程求原码,补码_java语言基础(原码反码补码)
- 图论入门及基础概念(图篇)
- mkfs.ext3 快速格式化_U盘格式化
- magicbook的linux是哪个版本,荣耀MagicBook 2019预装Linux 影响使用吗
- android手机有哪些版本,支持安卓5.0的手机有哪些 android5.0手机汇总
- java计算机毕业设计共享充电宝管理系统演示录像2021MyBatis+系统+LW文档+源码+调试部署
- 两张人脸图像比对ocr技术
- 租车新玩法 神州租车打造行业标杆
- 我的Python笔记02
- arcgis安装后重启提示 flexnet vendor daemon 交互式服务检测
- 【转】初入NLP领域的一些小建议
热门文章
- vue可视化拖拽生成工具_GitHub - 1260215278/dragUI: 基于vuedraggable.js + uni 的可视化拖拽编程,自动生成项目,自动生成代码,自行导入第三方组件...
- 小程序获取用户信息 php发送数据库,qq小程序如何获取用户信息并存入数据库实例...
- 空间留言工具_新房,拖把等清洁工具都放哪?
- linux检查python安装情况,使用Python检测Linux服务器连接状态
- table中加表单元素怎么验证_el-table嵌入表单元素注意事项(验证规则prop写法与数据初始化)...
- php+select为空,SELECT时候,如何处理某字段空值?
- nginx: [emerg] mkdir() /var/temp/nginx/client failed (2: No such file or directory)
- 大数据:知识,真正的价值体现
- python装饰器与闭包_Python:函数装饰器和闭包
- “21天好习惯”第一期-13