hdu 4709 Herding (数学)

///给你n个点 枚举三点求最小三角形面积
# include <algorithm>
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <math.h>
# include <string>
using namespace std;
int main()
{
    int t,n,i,j,k;
    double x[110],y[110],minn,s;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            scanf("%d",&n);
            for(i=0; i<n; i++)
                scanf("%lf %lf",&x[i],&y[i]);
            minn=999999999;
            int flag=0;
            if(n<=2)
                printf("Impossible\n");
            else
            {

                for(i=0; i<n; i++)
                {
                    for(j=i+1; j<n; j++)
                    {
                        for(k=j+1; k<n; k++)
                        {
                            if(x[i]==x[j]&&x[j]==x[k]||y[i]==y[j]&&y[j]==y[k])
                                s=0;
                          ///  s=fabs((x[i]-x[k])*(y[j]-y[k])-(x[j]-x[k])*(y[i]-y[k]))/2.0;///已知三点算面积
                              s=(1/2.0)*fabs(x[i]*y[j]+x[j]*y[k]+x[k]*y[i]-x[i]*y[k]-x[j]*y[i]-x[k]*y[j]);
                            if(s>=0.005)
                            {
                                minn=min(s,minn);
                                flag=1;
                            }
                        }
                    }
                }
                if(flag)
                    printf("%.2lf\n",minn);
                else
                    printf("Impossible\n");
            }
        }
    }
    return 0;
}

时间: 2024-11-10 15:19:22

hdu 4709 Herding (数学)的相关文章

HDU 4709 Herding 几何题解

求所有点组成的三角形最小的面积,0除外. 本题就枚举所有可以组成的三角形,然后保存最小的就是答案了,因为数据量很少. 复习一下如何求三角形面积.最简便的方法就是向量叉乘的知识了. 而且是二维向量叉乘P1(ax, ay), P2(bx, by),公式为:|P1 X P2| = abs(ax*by - ay*bx) 三角形面积就是|P1 X P2| / 2; 本题也是float过不了,换成double就可以过了. const int MAX_N = 101; struct VertexPoint {

HDU - 4709 Herding

Description Little John is herding his father's cattles. As a lazy boy, he cannot tolerate chasing the cattles all the time to avoid unnecessary omission. Luckily, he notice that there were N trees in the meadow numbered from 1 to N, and calculated t

hdu 4811 Ball(数学)

题目链接:hdu 4811 Ball 题目大意:有三种颜色的球若干,每次向桌子上放一个球,保证是一条序列,每次放球的得分为当前放入序列的球的前面有多少种不同的颜色a,后面的有多少种不同的颜色b,a+b.问说给定球的数量后,最大得分为多少. 解题思路:因为放球顺序是自己定的,所以我们可以尽量早得构造一个序列,使得后面放入球的得分均保持在峰值.那么求峰值就要根据球的数量来决定.我们叫得分为峰值的求为最高得分球,它们有很多个.对于一种颜色来说:0个,表示不能为在最高得分球的左边和右边,换句话来说,就是

hdu 4709

求三角形的面积 利用向量点乘得到三角形的面积 三个for循环嵌套即可 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; const double INF = 1e9+50; double x[1000]; double y[1000]; double area(int i, int j, int k) { double ax

hdu 1719 Friend 数学推导

题链:http://acm.hdu.edu.cn/showproblem.php?pid=1719 Friend Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2099    Accepted Submission(s): 1058 Problem Description Friend number are defined recur

hdu 5211 Mutiple 数学

Mutiple Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5211 Description wld有一个序列a[1..n], 对于每个1≤i<n, 他希望你求出一个最小的j(以后用记号F(i)表示),满足i<j≤n, 使aj为ai的倍数(即aj mod ai=0),若不存在这样的j,那么此时令F(i) = 0保证1≤n≤10000,1≤ai≤10000 对于任意

HDU 5047 Sawtooth(数学 公式 大数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 Problem Description Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines can divide a plane into at most four regions. ● Three lines can divide a plane into at m

hdu 5073 Galaxy(数学)

题目链接:hdu 5073 Galaxy 题目大意:给定N个点,可以移动其中的K的点,问说最后I的最小值可以是多少. 解题思路:因为质量都为1嘛,所以就是求方差,可以移动K个,所以即选连续的n=N-K个使得方差最小.注意N=K的情 况. S表示n个数的和,T表示n个数平方的和,那么这n个数的方差即为T - S * S / n,然后扫描一遍数组维护S,T,并且计算 方差的最小值. #include <cstdio> #include <cstring> #include <al

HDU 1030 Delta-wave 数学题解

给出一个数字塔,然后求沿着数字之间的边走,给出两个数字,问其路径最短的长度是多少. 看似一条搜索题目,只是有一定做题经验的人都知道,这个不是搜索题,直接搜索肯定超时. 这个是依据规律计算的数学题目. 我这里的思路是一层一层往下搜,利用层间的规律加速,实现层跃,到了同一层,或者同一个对角列的时候就能够直接计算出结果了.对角列即顺着三角形的边能直接走到目标的列. 数学计算出层与层之间相差2,而也能够利用这个规律计算N和M所在的层和列. 这样做由点麻烦,只是我自己琢磨出来的,不错的思路.O(∩_∩)O