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

Practice

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

343 4 5 631 2 453.4 2.8 7.1 5.2 10

Output

5.3326822519-14.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\n",ans);
		else
			printf("-1\n");
	}
	return 0;
}

  

 

ACM: Gym 101047K Training with Phuket's larvae - 思维题

时间: 2024-10-08 23:09:14

ACM: Gym 101047K Training with Phuket's larvae - 思维题的相关文章

Gym 101047K Training with Phuket&#39;s larvae

http://codeforces.com/gym/101047/problem/K 题目:给定n<=2000条绳子,要你找出其中三条,围成三角形,并且要使得围成的三角形面积最小 思路: 考虑一下三角形面积公式1/2a*b*sinO ,那么可以暴力枚举两条边,第三条边要尽量小,为什么呢?因为我要使得O角尽量小.sin值也小了.这是根据小边对小角得到的.所以要找到第一条>a-b的.这样就能使结果最优.这个找可以用二分啦.同理找一个<a+b的 #include <cstdio>

思维题 Gym 100553A Alter Board

题目传送门 1 /* 2 题意:一个n×m的矩形,相邻的颜色不同,黑或白.问最少的翻转次数,每次翻转可指定任意一个子矩形 3 思维题:最少要把偶数行和列翻转,也就是n/2+m/2次 4 */ 5 #include <cstdio> 6 using namespace std; 7 8 int main(void) //Gym 100553A Alter Board 9 { 10 // freopen ("A.in", "r", stdin); 11 fr

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,可惜我没有)

暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了... 2018 Multi-University Training Contest 1 HDU6298.Maximum Multiple 题目意思就是给你一个n,找出来三个数x,y,z, 使得n=x+y+z,而且x,y,z都是n的因数,并且x*y*z为最大值,让你输出来x*y*z的最大值.如果没有满足条件的情况就输出-1. 由1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4,所

ACM: Gym 101047M Removing coins in Kem Kadr&#227;n - 暴力

Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Practice Description standard input/output Andréh and his friend Andréas are board-game aficionados. They know many of their friends

ACM: Gym 100935F A Poet Computer - 字典树

Gym 100935F A Poet Computer Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Description standard input/output The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems. One of th

ACM: Gym 100935B Weird Cryptography - 简单的字符串处理

Weird Cryptography Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Gym 100935B Description standard input/output Khaled was sitting in the garden under an apple tree, suddenly! , well... you should guess what happened, an

ACM: Gym 100935G Board Game - DFS暴力搜索

Board Game Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Gym 100935G Description standard input/outputStatements Feras bought to his nephew Saleem a new game to help him learning calculating. The game consists of a boar

Codeforces Gym 100676G Training Camp 状压dp

http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修该课程必须修完先修课程.问最多能学到多少点数. 非常简单的一道状压dp(一开始我还误导队友写成两维的去了 T^T); dp[s] : s 的二进制存放的是已经选择的课程,在该状态下的能获得的最大的点数. 这时如果再学一门课程k,将转移到状态ss (s | (1 << k) ) ,能否转移需要判断合

ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Practice Description standard input/output At the ruins of Wat Phra Si Sanphet (??????????????), one can find famous inscri