HDU 4380 预处理枚举

题意:给出n个房子m个矿问从n个房子选三个组成的三角形内部矿数为奇数有多少种选法。

先预处理一下每条线段正上方有多少个点,然后在枚举三条线段就可以了。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct point
{
    long long x,y;
};
int cmp(point a,point b)
{
    return a.x<b.x;
}
long long Direction(point pi,point pj,point pk) //判断向量PiPj在向量PiPk的顺逆时针方向 +顺-逆0共线
{
    return (pj.x-pi.x)*(pk.y-pi.y)-(pk.x-pi.x)*(pj.y-pi.y);
}
long long yl[205][205];
point data[205],mine[1005];
int main()
{
    int t,n,m,ca=0;
    while(~scanf("%d%d",&n,&m))
    {
        memset(yl,0,sizeof(yl));
        for(int i=0; i<n; i++)
            scanf("%I64d%I64d",&data[i].x,&data[i].y);
        for(int i=0; i<m; i++)
            scanf("%I64d%I64d",&mine[i].x,&mine[i].y);
        sort(mine,mine+m,cmp);
        sort(data,data+n,cmp);
        for(int i=0; i<n; i++)       //预处理
            for(int j=i+1; j<n; j++)
                for(int k=0; k<m&&mine[k].x<data[j].x; k++)
                    if(mine[k].x>=data[i].x&&Direction(data[i],data[j],mine[k])>0)
                        yl[i][j]++;
        long long ans=0;
        for(int i=0; i<n; i++)
            for(int j=i+1; j<n; j++)
                for(int k=j+1; k<n; k++)
                {
                    long long q=yl[i][k]-yl[i][j]-yl[j][k];
                    if(q<0) q=-q;
                    if(q%2)
                        ans++;
                }
        printf("Case %d: ",++ca);
        printf("%I64d\n",ans);
    }
    return 0;
}
时间: 2024-12-04 00:01:59

HDU 4380 预处理枚举的相关文章

HDU 3823 暴力枚举

题意:给出A,B, 找出一个最小的m,使A+m,B+m为连续的两个素数. 枚举2000W以内的素数暴力找. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 21000000 bool isprime[maxn]; long long prime[maxn],nprime; void getp

HDOJ/HDU 1015 Safecracker(枚举、暴力)

Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein safe behind a painting in the second-floor library. Klein safes are extremely rare; most of them, along with Klein and his factory, were destroyed in Wo

HDU 4353 枚举

题意:给出n个点,为商人要购买的点,m个点为金矿的位置.问如何使够买三个点或三个以上的点围成的多边形面积与多边形内金矿的数量的比值最小. 这题很容易想到比值最小的肯定是三角形和在三角形内的点的数量想比.虽然我没想到.然后很容易想到四重循环来找最小的比值但是会超时,所以需要预处理一下,先把两组点按照x轴排序,枚举两个n点,针对于每组点组成的线段选线段正上方的m点,存入数组中.然后再进行n^3循环枚举3个n内的点,长线段上的m点数-两条短线段的m点数的绝对值就是三角形内的点数.为什么是绝对值,因为长

HDU 1595 find the longest of the shortest(枚举,最短路)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1595 题目: find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 667    Accepted Submission(s): 220 Problem Description Ma

HDU 2363 Cycling:二分+枚举+限制最短路,好题

链接: http://acm.hdu.edu.cn/showproblem.php?pid=2363 题目大意: 小明从家里走到学校去考试, 路上有各个交叉点,它们有自己的海拔高度. 小明从家里走到学校的路上,必然会经过不同的交叉点,因此会不断的走上走下,忐忐忑忑,这让他很不安,会影响他考试的发挥.因此,他要选择一条起伏最小的路去学校.所谓的"起伏最小",是指这条路上海拔最高的点与海拔最低的点的差值最小. 在起伏最小的前提下,还要求出路程距离最短. 分析与总结: 这题让我想起以前做过的

HDU 1598 find the most comfortable road (枚举+Kruskal)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1598 题目: Problem Description XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的"舒适度"有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,fl

HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)

链接: HDU : http://acm.hdu.edu.cn/showproblem.php?pid=2489 POJ  : http://poj.org/problem?id=3925 题目: Problem Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated according to the following equation. Given a comp

hdu 1077 Catching Fish 计算几何+暴力枚举

   简单的暴力枚举,枚举两个点在圆上,用向量法求下圆心.复杂度o(n^3),但数据量只有300 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <c

HDU 4569 长沙E题 枚举

题意:给你函数 f(x) = anxn +...+ a1x +a0 最多N就4位,输入任意一个x使f(x)%(prime*prime)=0. 这题枚举就可以,首先如果满足f(x)%(prime*prime)=0必须要满足f(x)%prime=0这个条件. 那么应该先找到一个x满足f(x)%prime=0,然后在(x-prime*prime)区间内x+=prime(保证f(x)%prime=0总成立),如果有f(x)%(prime*prime)=0那么就输出. 找出一个x在(0-prime)区间内