zoukankan      html  css  js  c++  java
  • 处女座的签到题(求第k大个数

    题目描述
    平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多少?
    输入描述:

    第一行T,表示样例的个数。
    对于每一组样例,第一行两个整数n和k,
    接下来n行,每行两个整数x,y表示点的坐标
    T<=80
    3<=n<=100
    -109<=x,y<=109
    对于每一组样例,保证任意两点不重合,且能构成的三角形的个数不小于k

    输出描述:

    对于每一组样例,输出第k大三角形的面积,精确到小数点后两位(四舍五入)。

    Tricky点:要使用nth_element来找出第k大的数,否则会tle

    #include<cstdio>
    #include<complex>
    #include<algorithm>
    #include<functional>
    using namespace std;
    using point=complex<long long>;
      
    int T,n,k,x,y,sn;
    point a[105];
    long long s[1000005];
      
    long long get_area(int p, int q, int r)
    {
        point t1=a[p]-a[q];
        point t2=a[r]-a[q];
        return abs((conj(t1)*t2).imag());
    }
      
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&k);
            for(int i=1;i<=n ;i++)
                scanf("%d%d",&x,&y),a[i]=(point){x,y};
            sn=0;
            for(int i=1;i<= n -2;i++)
                for(int j=i+1;j<=n -1;j++)
                    for(int k=j+1;k<=n;k++)
                    {
                        s[++sn]=get_area(i,j,k);
                        if(s[sn]==0)
                            --sn;
                    }
            nth_element(s+1,s+k,s+sn+1,greater<long long>());
            printf("%lld",s[k]>>1);
            if(s[k]&1)
                printf(".50
    ");
            else
                printf(".00
    ");
        }
        return 0;
    }
    
    我现在最大的问题就是人蠢而且还懒的一批。
  • 相关阅读:
    生成器
    IO调度算法
    进程与线程
    磁盘阵列(RAID)实例
    KVM虚拟化技术(七)虚拟机配置文件
    查询快递单号-京东快递接口
    快递单号查询快递鸟API接口-优速快递
    查询快递单号-德邦快递
    快递单号查询快递鸟API接口-EMS
    快递单号查询快递鸟API接口--安能快递
  • 原文地址:https://www.cnblogs.com/pot-a-to/p/10937054.html
Copyright © 2011-2022 走看看