439. 崔逗逗的难题
时间限制 1000 ms
内存限制 65536 KB
题目描述
崔逗逗放假回家后每天只能吃饭睡觉打豆豆感觉好无聊,该怎么给自己找找乐子呢?于是他主动去帮邻家初中小妹妹做作业。他看到了这样一道题:在一个边长为 a(0≤a≤10001) 的正方形ABCD中,分别以A、B、C、D为圆心做半径为a的四条弧,如图。求标号为1,2,3的图形面积。崔逗逗想了好久居然不会做,但是做不出来又会在小妹妹面前很没面子,所以他找到你来帮忙。
输入格式
多组数据。每组数据包含一个实数a,表示正方形的边长。
输出格式
对于每组数据,输出标号为1,2,3的图形面积。保留6位小数。
输入样例
0.2
输出样例
0.012606 0.020452 0.006942
赛中提交:NULL
赛后AC:yes
反省- -:
比赛的时候没安排时间看,最后匆匆忙忙没有把公式推出来...
很简单的一道数学题,扇形面积减去三角形面积可以得到一个比较奇怪的图形的面积,这就是关键的一步
但是这一道还是有一个很重要的收获~!!!
那就是有比double精度更高的long double~!!!
输入输出的形式是%Lf或者%llf
下面是AC代码
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <functional>
#define maxn 500005
using namespace std;
int main()
{
double a;
long double s2=(acos(-1)/12+sqrt(3.0)/2.0-1)*4,s3=(-sqrt(3.0)/4.0+1-acos(-1)/6)*4,s1=1-s2-s3;
while(scanf("%lf",&a)!=EOF){
long double x=a;
long double s=x*x;
printf("%lf %lf %lf\n",(double)(s1*s),(double)(s2*s),(double)(s3*s));
}
return 0;
}