zoukankan      html  css  js  c++  java
  • ACM: Gym 101047K Training with Phuket's larvae

     Gym 101047K Training with Phuket's larvae
    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

    Description

    standard input/output

    Thai cuisine is known for combining seasonings so that every dish has flavors that are sweet (sugar, fruits, bell peppers), spicy, sour (vinegar, tamarind, lime), and salty (soy sauce, fish sauce). The most exotic dish, however, is the one containing fried insect larvae; naturally, it is often showcased to tourists. Westerners usually shudder at the thought of eating larvae, but they are highly valued in Thailand and they are a huge success in parties. Thai children often play with food. They specially like building triangles up using fried larvae as the edges.

    Marcos "the (Rubik) solver" coaches his university's team on a famous computer programming contest. Next year, the contest's world finals will take place in Phuket, Thailand.

    Marcos knows how Thai children like to play with larvae, so he had an idea for a special training session. His idea involves preparing a large amount of fried larvae of several different lengths. Each of his friends, in turn, must select three larvae to build a triangle. Then, the amount of fried larvae each friend has to eat is proportional to the area of the triangle she or he built.

    Marcos hopes that, since you want to eat as little larvae as possible, you'll write a program to choose the larvae that forms a triangle of minimum area. Thus, besides training your computer programming skills, you'll also be training to face Thai cuisine. If you actually enjoy this dish, you may use this program to help your other friends, making sure that there will be more fried larvae left for you.

    Input

    The first line has a single integer T, the number of test cases.

    Each test case starts with an integer N, the number of larvae. In the next line there are N space-separated real numbers a1, ..., an, representing the lengths of the larvae.

    Limits

    • 1 ≤ T ≤ 30
    • 1 ≤ N ≤ 2·103
    • 1 ≤ ai ≤ 500
    • The sum of N over all test cases will not exceed 6·103

    Output

    For each test case, print a single line containing the minimum area for that case, the error should not exceed 10 - 4; if it is not possible to build a triangle from the larvae, print -1.

    Sample Input

    Input
    3
    4
    3 4 5 6
    3
    1 2 4
    5
    3.4 2.8 7.1 5.2 10
    Output
    5.3326822519
    -1
    4.3599885321

    /*/
    题意:
    给你n条边,问这n条边构成的三角形的面积最小是多少。
    
    题意很简单,想着暴力,一看复杂度 O(8*n^3) ...  让我冷静下。。
    
    然后想到枚举两条边用二分第三条边~TLE 噗。。
    
    后面考虑了很久,要求最小的面积,只有三角形是那种细长细长的才能最小,又枚举 i 和 j 是按照顺序来枚举的,只要找到,比 i+j 小一点点的的就行了。
    
    用到lower_bound( , , );函数;
    
    AC代码:
    /*/

    #include <map>
    #include <set>
    #include <cmath>
    #include <ctime>
    #include <stack>
    #include <queue>
    #include <cstdio>
    #include <cctype>
    #include <bitset>
    #include <string>
    #include <vector>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #define debug(x) cout<<"["<<x<<"]";
    #define FIN freopen("input.txt","r",stdin);
    #define FOUT freopen("output.txt","w+",stdout);
    //#pragma comment(linker, "/STACK:102400000,102400000")
    using namespace std;
    typedef long long LL;
    typedef pair<int, int> PII;
    const int MAX=1e5+5;
    
    
    double Check(double a,double b,double c) {
    	double s;
    	double p=(a+b+c)/2;
    	return s=sqrt((p-a)*(p-b)*(p-c)*p);
    }
    
    int main() {
    	int T;
    	double a[MAX];
    	cin>>T;
    	while(T--) {
    		int n;
    		scanf("%d",&n);
    		for(int i=0; i<n; i++) {
    			scanf("%lf",&a[i]);
    		}
    		double ans=1e9+10000;
    		sort(a,a+n);
    		for(int i=0; i<n; i++) {
    			for(int j=i+1; j<n-1; j++) {
    				if(a[i]+a[j]>a[j+1]) ans=min(ans,Check(a[i],a[j],a[j+1]));
    				int k=lower_bound(a+j,a+n,a[i]+a[j])-a-1;
    				if(k>j&&a[k]<a[i]+a[j]) ans=min(ans,Check(a[i],a[j],a[k]));
    			}
    		}
    		if(ans!=1e9+10000)
    			printf("%.10lf
    ",ans);
    		else
    			printf("-1
    ");
    	}
    	return 0;
    }
    
    
    

      

     


  • 相关阅读:
    C盘与D盘中间有个恢复分区,导致C盘不能扩展卷解决
    Win下,QT控制台无输出解决
    QT与ECharts交互,绘制曲线图
    博客园好看的自定义主题
    Qt5之控件在初始化时就触发了槽函数的问题解决方案
    使用QCustomPlot,跟随鼠标动态显示线上点的值
    QCustomPlot下setTickLabelType()函数在新版本被移除如何解决
    记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法
    使用QPainter绘制汽车仪表盘,动态显示
    QT下使用百度地图js,发送角度值给js使小车根据角度值调整车头方向
  • 原文地址:https://www.cnblogs.com/HDMaxfun/p/5797020.html
Copyright © 2011-2022 走看看