• 处女座的签到题(求第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;
    }
    
    我现在最大的问题就是人蠢而且还懒的一批。
  • 相关阅读:
    vue关于样式的绑定
    vue插口
    vue组件 父子 通讯
    vue实现翻页功能加高阶函数加购物车
    MySQL 索引面试总结
    phpstorm配置git并解决Terminal 中文乱码(Unicode 编码)的方法
    php 下载图片并打包成Zip格式压缩包
    MySQL5.6升级到5.7详细教程
    windows下安装vue教程
    一致性hash算法详解
  • 原文地址:https://www.cnblogs.com/pot-a-to/p/10937054.html
Copyright © 2020-2023  润新知