题目链接: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(叉积和三角形知识的综合应用)的更多相关文章

  1. HDU 4380 Farmer Greedy 计算几何+bitset

    枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数.用bitset记录. 然后三角形就是3个bitset&一下 #include <cstdio> #include ...

  2. hdu 4709:Herding(叉积求三角形面积+枚举)

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)     ...

  4. hdu 5312 Sequence(数学推导——三角形数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others)  ...

  5. hdu 6601 区间条件极值 - 区间 最大 三角形周长

    题目传送门//res tp hdu 目的 对长度为n的区间,给定q个子区间,求其元素能构成三角形的最大周长.有多组测试. n 1e5 q 1e5 ai [1,1e9] (i∈[1,n]); 数据结构 ...

  6. POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积

    题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动8个方向的中的一个并且每次移动距离只有1和√2这两种情况,最后一定会回到原点(以字母5结束),请你计算这个点所画出图形的面积 题解 ...

  7. hdu 4617 Weapon(叉积)

    大一学弟表示刚学过高数,轻松无压力. 我等学长情何以堪= = 求空间无限延伸的两个圆柱体是否相交,其实就是叉积搞一搞 详细点就是求两圆心的向量在两直线(圆心所在的直线)叉积上的投影 代码略挫,看他的吧 ...

  8. HDU 1176 免费馅饼(数字三角形)

    免费馅饼 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉 ...

  9. (hdu step 7.1.6)最大三角形(凸包的应用——在n个点中找到3个点,它们所形成的三角形面积最大)

    题目: 最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. datagrid使用和文字超出tip提示

    function LoadTable(queryData) {             $("#eventInfoTable").datagrid({               ...

  2. Tomcat服务器的数字证书 HTTPS 连接!

    SUN公司提供了制作证书的工具keytool, 在JDK 1.4以后的版本中都包含了这一工具,它的位置为\bin\keytool.exe 注意要使用一下 cmd命令,请确认jdk环境变量可以使用,可以 ...

  3. MiniUI学习笔记一【转】

    MiniUI Api文档:http://miniui.com/docs/api/index.html 1.取组件值 传递form data,load发送 请求加载数据 <script type= ...

  4. [NOIP2018模拟赛10.18]自闭报告

    闲扯 这一天,菜鸡RyeCatcher又想起来了被毒瘤题支配的恐惧 今天比较好玩,还是ljy提醒才发现文件夹里有题面...不知道外面的人什么时候才发现 看完了题面,又回到了雅礼啥题也不会写的感觉 T1 ...

  5. optparser模块 与 ZIP爆破(Python)

    optparser模块: 为脚本传递命令参数. 初始化: 带 Usage 选项(-h 的显示内容 Usage:): >>> from optparse import OptionPa ...

  6. bootstrap实现Carousel旋转木马(焦点图)

    引入bootstrap相关文件后,在html中写如下代码: <div class="col-lg-9" > <!-- Carousel============== ...

  7. React/事件系统

    React基于虚拟DOM实现了一个合成事件层,我们所定义的事件处理器会接收到一个合成事件对象的实例事件处理. 并且所有事件都自动绑定在最外层上.如果需要访问原生事件对象,可以使用nativeEvent ...

  8. Linux环境下Redis安装和常见问题的解决

    Redis是一款非常非常非常好用的缓存数据库,在保存需要定期更新的Token值,或者在保证高并发安全可靠性的场景下,基本上说是必用了. 安装过好多次Redis了,也用过阿里云Redis数据库,但是每次 ...

  9. Golang内存管理

    Golang 内存管理 原文链接[http://legendtkl.com/2017/04/02/golang-alloc/] Golang 的内存管理基于 tcmalloc,可以说起点挺高的.但是 ...

  10. django启动通过ip或是域名访问

    setting.py里面的ALLOWED_HOSTS = ['localhost','域名','本机ip'] 启动时一般都是命令行 python manage.py runserver [端口号]  ...