北京师范大学第十五届ACM决赛-重现赛E Euclidean Geometry (几何)
链接:https://ac.nowcoder.com/acm/contest/3/E
来源:牛客网
Euclidean Geometry
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
题目描述
在某节无聊的课上,SK同学随意画了一个三角形然后用尺子量了一下,发现三边长分别为a,b,c,然后SK同学拿起圆规分别以三个顶点为圆心画了三个圆,为了使图形看上去更美观,这三个圆两两不相交也互不包含,这里认为圆的半径可以是0(称之为“点圆”),现在SK同学想知道怎么画圆才能使三个圆的面积之和最大。
输入描述:
第一行是一个正整数T(≤ 100),表示测试数据的组数, 每组测试数据只有一行,包含三个不超过100的正整数a,b,c,表示三条边的长度,保证这三条边能构成一个三角形。
输出描述:
对于每组测试数据,输出三个圆的面积之和的最大值,要求相对误差不超过1e-6。
也就是说,令输出结果为a,标准答案为b,若满足fabs((a - b)/max(1.0, b))≤1e-6,则输出结果会被认为是正确答案。
示例1
输入
复制
2
1 1 1
3 6 5
输出
复制
3.141592653590
81.681408993335
备注:
pi=acos(-1.0)=3.141592653589793238462643383...
题意:
思路:
首先我们知道圆的面积是pirr ,最终三个圆的面积和一定是一个关于r的二次函数,而且二次函数的系数a是大于0的,那么极值一定取在边界值,
再通过分析我们可以知道,对三条边排序,最大面积情况的时候一定是取中间那个边先画一个圆,然后 最大边减去中间边的值为半径再画一个圆。
如下图,面积取极值。
细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
const double pi=acos(-1);
int a[maxn];
int main()
{
// freopen("D:\\code\\text\\input.txt","r",stdin);
//freopen("D:\\code\\text\\output.txt","w",stdout);
// cout<<5*5*pi+pi<<endl;
int t;
cin>>t;
while(t--)
{
cin>>a[1]>>a[2]>>a[3];
sort(a+1,a+1+3);
double ans=a[2]*a[2]*pi+(a[3]-a[2])*(a[3]-a[2])*pi;
cout<<fixed<<setprecision(8)<<ans<<endl;
}
return 0;
}
inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '0');
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 - ch + '0';
}
}
else {
*p = ch - '0';
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 + ch - '0';
}
}
}
北京师范大学第十五届ACM决赛-重现赛E Euclidean Geometry (几何)的更多相关文章
- 北京师范大学第十五届ACM决赛-重现赛
Another Server 时间限制:1秒 空间限制:262144K 题目描述 何老师某天在机房里搞事情的时候,发现机房里有n台服务器,从1到n标号,同时有2n-2条网线,从1到2n-2标号,其中第 ...
- 北京师范大学第十五届ACM决赛-重现赛J Just A String (kmp算法延伸)
链接:https://ac.nowcoder.com/acm/contest/3/J 来源:牛客网 Just A String 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 北京师范大学第十五届ACM决赛-重现赛K Keep In Line ( 字符串模拟实现)
链接:https://ac.nowcoder.com/acm/contest/3/K 来源:牛客网 Keep In Line 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 北京师范大学第十五届ACM决赛-重现赛 B Borrow Classroom (树 ——LCA )
链接:https://ac.nowcoder.com/acm/contest/3/B 来源:牛客网 Borrow Classroom 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 2 ...
- 北京师范大学第十五届ACM决赛-重现赛D Disdain Chain (规律+组合数学)
链接:https://ac.nowcoder.com/acm/contest/3/D 来源:牛客网 Disdain Chain 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 北京师范大学第十五届ACM决赛-重现赛C Captcha Cracker (字符串模拟)
链接:https://ac.nowcoder.com/acm/contest/3/C 来源:牛客网 Captcha Cracker 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26 ...
- 北京师范大学第十四届ACM决赛-重现赛 F:Training Plan(DP)
传送门 题意 将n个数分成m个集合,\(V_i表示max(x-y),x,y∈第\)i个集合,\(求minΣV_i\) 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移 ...
- 北京师范大学第十六届程序设计竞赛决赛-重现赛-B题
一.题目链接 https://www.nowcoder.com/acm/contest/117/B 二.题意 给定一组序列$a_1,a_2,\cdots,a_n$,表示初始序列$b_1,b_2,\cd ...
- 北京师范大学第十六届程序设计竞赛决赛 F 汤圆防漏理论
链接:https://www.nowcoder.com/acm/contest/117/F来源:牛客网 汤圆防漏理论 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
随机推荐
- 在JS中统计函数执行次数
一.统计函数执行次数 常规的方法可以使用 console.log 输出来肉眼计算有多少个输出 不过在Chrome中内置了一个 console.count 方法,可以统计一个字符串输出的次数.我们可以利 ...
- RestTemplate 调用本地服务 connection refused
当需要使用服务间的互相调用的时候,通常来说最优雅的方式莫过于Feign调用了.但是有时候特殊原因还是需要使用httpClient之类的工具. 本次我在使用RestTemplate调用本地服务的时候,会 ...
- lr参数与C语言函数参数的区别
C变量不能再lr函数中使用: c变量必须定义在lr函数之前: LR参数可以在LR函数中直接当做字符串使用. LR参数是lr自己封装的一个钟对象, LR参数的表达方式:{ParamName}
- php curl http digest
php用curl访问有http digest验证的网址时,不能直接加在URL上,例如: http://user:pass@xxx.xxx.xxx.xxx/index.php?a=1&b=2 这 ...
- Eigen中的矩阵及向量运算
Eigen中的矩阵及向量运算 ,[+,+=,-,-=] ,[\*,\*=] ,[.transpose()] ,[.dot(),.cross(),.adjoint()] ,针对矩阵元素进行的操作[.su ...
- 5、Shiro之jdbcRealm认证授权
登录认证: 注意,下面我是以连接orcal数据库为例的依赖,如果各位同仁使用的是骑她数据库,可以换成对应数据库的依赖(数据源不用换) Pom.xml增加依赖: <!--引入连接orcal的jar ...
- hibernate中get和load区别
在日常开发中,获取数据时必不可少的,这样就要用到get和load方法来实现了.下面简单说一下get和load的区别. 1.返回值不同 使用get方法检索数据时,没有该数据返回值为null. 而使用lo ...
- 11 ORA-8102:Index Corruption解析
11 ORA-8102:Index Corruption解析 [oracle@DSI ~]$ oerr ora 810208102, 00000, "index key not found, ...
- Go语言入门篇-基本流程控制
一.if语句 二.switch语句 三.for语句 四.select语句
- docker 一些命令
docker的基本命令 (1)创建一个虚拟机:docker-machine create --driver virtualbox default, (2)列出所有虚拟机:docker-machine ...