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代码如下:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll; int cnt[][];
struct point
{
int x,y;
bool operator < (const point & A)const
{
return x<A.x;
}
}p[]; ll cross(point a,point b,point c)
{
ll x1=(ll)b.x-a.x;
ll y1=(ll)b.y-a.y;
ll x2=(ll)c.x-a.x;
ll y2=(ll)c.y-a.y;
return x1*y2-y1*x2;
}
int main()
{
int n,m;
int kase=;
while(scanf("%d%d",&n,&m)==)
{
memset(cnt,,sizeof(cnt));
for(int i=;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
for(int i=;i<=m;i++) scanf("%d%d",&p[i+n].x,&p[i+n].y); sort(p+,p++n);
for(int i=;i<=n-;i++)
for(int j=i+;j<=n;j++)
for(int k=n+;k<=n+m;k++)
{
if(p[j].x>p[k].x&&p[k].x>p[i].x && cross(p[i],p[j],p[k])<) cnt[i][j]++;
} int ans=;
for(int i=;i<=n-;i++)
for(int j=i+;j<=n-;j++)
for(int k=j+;k<=n;k++)
{
int t=abs(cnt[i][j]+cnt[j][k]-cnt[i][k]);
if(t&) ans++;
}
printf("Case %d: %d\n",++kase,ans);
}
return ;
}
另外有仓鼠学长的思路是,枚举三边,上面的两边的下面和下面一边的上面存在的点取个交集就是这个三角形内部的点的个数,,觉得不如幻神的思路来得好,而且觉得写起来也麻烦,不过作为一种思路记下来总是好的- 。-
HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)的更多相关文章
- HDU 4380 Farmer Greedy 计算几何+bitset
枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数.用bitset记录. 然后三角形就是3个bitset&一下 #include <cstdio> #include ...
- hdu 4709:Herding(叉积求三角形面积+枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 5312 Sequence(数学推导——三角形数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others) ...
- hdu 6601 区间条件极值 - 区间 最大 三角形周长
题目传送门//res tp hdu 目的 对长度为n的区间,给定q个子区间,求其元素能构成三角形的最大周长.有多组测试. n 1e5 q 1e5 ai [1,1e9] (i∈[1,n]); 数据结构 ...
- POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积
题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动8个方向的中的一个并且每次移动距离只有1和√2这两种情况,最后一定会回到原点(以字母5结束),请你计算这个点所画出图形的面积 题解 ...
- hdu 4617 Weapon(叉积)
大一学弟表示刚学过高数,轻松无压力. 我等学长情何以堪= = 求空间无限延伸的两个圆柱体是否相交,其实就是叉积搞一搞 详细点就是求两圆心的向量在两直线(圆心所在的直线)叉积上的投影 代码略挫,看他的吧 ...
- HDU 1176 免费馅饼(数字三角形)
免费馅饼 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉 ...
- (hdu step 7.1.6)最大三角形(凸包的应用——在n个点中找到3个点,它们所形成的三角形面积最大)
题目: 最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- TCP的三次握手与四次挥手笔记
TCP的三次握手与四次挥手笔记 TCP Flags URG: 紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 FIN: finish ...
- optparser模块 与 ZIP爆破(Python)
optparser模块: 为脚本传递命令参数. 初始化: 带 Usage 选项(-h 的显示内容 Usage:): >>> from optparse import OptionPa ...
- 华为Python面试题
最近在网上偶然看到此题: 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小 经过一番思索,我试着用穷举法 ...
- Echarts配置项详解
1.图表标题 title: { x: 'left', // 水平安放位置,默认为左对齐,可选为: // 'center' ¦ 'left' ¦ 'right' // ¦ {number}(x坐标,单位 ...
- CSS3实现瀑布流布局
讲干货,不啰嗦,瀑布流布局是种常见的布局方式,常用于图片相关的样式展示,通过CSS3的多列(Multi-column)属性,可以简单的实现类似效果. 具体步骤: 1.设置外部容器多列列数(column ...
- word生成目录的pdf
在很多情况下,需要将Word转换为带目录书签的PDF,方便pdf阅读,所以可以使用word自带的pdf转换,在转换时设置相关即可 注意:待转换Word中应该有目录,可以用Word中的标题来自动生成目录 ...
- LeetCode--链表
1.使用常量空间复杂度在O(n log n)时间内对链表进行排序. 思路: 因为题目要求复杂度为O(nlogn),故可以考虑归并排序的思想. 归并排序的一般步骤为: 1)将待排序数组(链表)取中点并一 ...
- (15)while循环
循环结构 : while 循环结构的特点:减少代码的冗余,提高代码的效率注意:只要是循环一定要有判断条件退出循环,不然就成了死循环,程序会一直在内存执行,直到内存耗尽,暴毙..... 语法形式: wh ...
- 用js刷剑指offer(跳台阶)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 牛客网链接 思路 这一题和斐波那契数列思路完全一样. 假如青蛙从第n个 ...
- Paper Reading:word2vec Parameter Learning Explained
论文:word2vec Parameter Learning Explained 发表时间:2016 发表作者:Xin Rong 论文链接:论文链接 为了揭开Word2vec的神秘面纱,不得不重新整理 ...