POJ 1927 Area in Triangle(计算几何)
博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40707691
题目大意:
给你一个三角形的三边边长,给你一跟绳子的长度,将绳子放在三角形里围起来的面积最大是多少。
解题思路:
当然能够想到当绳子的长度十分长的时候,绳子能围城的最大面积就是三角形的面积。
当然还能够想到的是当绳子的长度比較短,小于三角形的内接圆的长度时,绳子能围城的面积就是绳子能围成的圆的面积。
那么剩下要计算的就是当绳子长度小于三角形周长而且大于三角形内接圆的时候。
这样的情况下,显然会是如图所看到的的情况。
那么这样的情况下的面积怎么计算呢?
如图:
两个三角形是相似的,所以红色绳子所围成部分的面积就是大三角形的面积减去小三角形的的面积再加上小三角形内切圆的面积,也就是代码中
ans = S-S*t*t+Pi*rr*rr; 的意义。至于小三角形内切圆的半径。则是用小三角形与大三角形相似算出来的比例求得的。
我感觉说的挺具体的,具体的看代码吧。
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <iostream>
#include <limits.h>
#include <algorithm>
#define LL long long
//#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define max3(a, b, c) (a>b?max(a, c):max(b, c))
#define min3(a, b, c) (a<b?min(a, c):min(b, c))
#define max4(a, b, c, d) max(max(a, b), max(c, d))
#define min4(a, b, c, d) min(min(a, b), min(c, d))
#define Read() freopen("data.in", "r", stdin);
#define Write() freopen("data.out", "w", stdout); const double Pi = acos(-1.0);;
const double Ee = 2.718281828459045235360;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const int MOD = 1000000009; const int dx4[] = {-1, 0, 1, 0};
const int dy4[] = { 0, 1, 0, -1};
const int dx8[] = {-1, 0, 1, 0, -1, -1, 1, 1};
const int dy8[] = {0 , 1, 0, -1, -1, 1, -1, 1};
const int dxhorse[] = {-2, -2, -1, -1, 1, 1, 2, 2};
const int dyhorse[] = {1 , -1, 2, -2, 2, -2, 1, -1}; using namespace std; struct Point {
double x, y;
} P[20010], m; int dcmp(double x) {
return x < -eps ? -1 : x > eps;
} int main()
{
double a, b, c, d;
int icase = 1;
while(~scanf("%lf%lf%lf%lf", &a, &b, &c, &d)) {
if(dcmp(a)==0 && dcmp(b)==0 && dcmp(c)==0 && dcmp(d)==0) {
break;
}
double L = a+b+c;
double cosA = (b*b+c*c-a*a)/(2*b*c);
double S = 0.5*b*c*(sqrt(1-cosA*cosA));
double r = S*2/L;
double ans;
if(d > L) {
ans = S;
}
else if(2*Pi*r >= d) {
ans = d*d/(4*Pi);
}
else {
double t = (L-d)/(L-2*Pi*r);
double rr = r*t;
ans = S-S*t*t+Pi*rr*rr;
}
printf("Case %d: %.2lf\n", icase++, ans);
} return 0;
} /*test case*/
/* */
POJ 1927 Area in Triangle(计算几何)的更多相关文章
- POJ 1927 Area in Triangle
Area in Triangle Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1674 Accepted: 821 D ...
- POJ 1927 Area in Triangle 题解
link Description 给出三角形三边长,给出绳长,问绳在三角形内能围成的最大面积.保证绳长 \(\le\) 三角形周长. Solution 首先我们得知道,三角形的内切圆半径就是三角形面积 ...
- 2018.07.04 POJ 1654 Area(简单计算几何)
Area Time Limit: 1000MS Memory Limit: 10000K Description You are going to compute the area of a spec ...
- hdu 1451 Area in Triangle(计算几何 三角形)
Given a triangle field and a rope of a certain length (Figure-1), you are required to use the rope t ...
- poj 1654 Area 多边形面积
/* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> ...
- poj 1265 Area 面积+多边形内点数
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5861 Accepted: 2612 Description ...
- POJ 1265 Area POJ 2954 Triangle Pick定理
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5227 Accepted: 2342 Description ...
- 2018.07.04 POJ 1265 Area(计算几何)
Area Time Limit: 1000MS Memory Limit: 10000K Description Being well known for its highly innovative ...
- POJ 1654 Area 计算几何
#include<stdio.h> #include<string.h> #include<iostream> #include<math.h> usi ...
随机推荐
- tornado框架基础08-sqlalchemy表关系和简单登录注册
01 一对一表关系 Module 需要先创建对应的 Module ,这里采用之前建立好的 User 和 UserDetails relationship from sqlalchemy.orm imp ...
- Postfix mail for azengna.com loops back to myself -solve
设置 /etc/postfix/main.cf 原配置 mydestination = $myhostname, localhost.$mydomain, localhost 改为 mydestina ...
- sql中Distinct&Count的用法
Distinct作用:消除重复的数值 1.如: select id from T1 select distinct id from T1 二者的检索效果如下: distinct可以用来修饰多列,如: ...
- Oracle中的特殊判式
Oracle中的特殊判式 除了逻辑运算之外,Oracle提供了一些特殊判式.这些判式可以用来生成更加复杂和灵活的查询条件.本节将着重介绍以下几种判式. Between: 取值范围 In: 集合成员测试 ...
- C#中将数字金额转成英文大写金额的函数
<span style="white-space:pre"> </span>/// <summary> /// 数字转金额大写 /// 调用示例 ...
- 【HDOJ6299】Balanced Sequence(贪心)
题意:给定n个只有左右括号的序列,要求将它们重新排序使得匹配的括号对数最大. n<=1e5 s[i]<=1e5 sum s[i]<=5e6 思路: 先把每个串内部的匹配数量减去,剩下 ...
- hihoCoder #1055 : 刷油漆 [ 树形dp ]
传送门 结果:Accepted 提交时间:2015-05-11 10:36:08 #1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到 ...
- 我的Github,个人博客
Github: github.com/wuxinwei 个人博客: blog.wuxinwei.org
- Linux中的进程与线程
介绍了Linux下fork()创建进程以及使用pthread_create()创建线程的方法 1. 基于进程的斐波那契数列 在下面的代码中,由子进程进行斐波那契数列的输出,父进程要等待子进程输出完毕, ...
- 如何使用google解决问题
如何使用google解决问题 redguardtoo著 文章选自2004年<程序员>杂志第8期P56 前面收集了篇如何问问题的文章就是<学会提问>http://blog.pro ...