http://acm.timus.ru/problem.aspx?space=1&num=1084
题目
有个人在他的正方形院子的中心的柱子上栓了一头山羊。这只山羊十分地贪吃,它能接触到的食物都会被它吃掉,但它不能出院子或者弄断栓它的绳子。它能到达院子里多大的面积?
输入
一行2个整数:正方向院子的边长
d
和绳子的长度
输出
一行一个精确到3位小数的浮点数表示山羊能到达的面积。
样例输入
10 6
样例输出
95.091
题解
有3种情况:
1.
2√r>=d
,这时正方形被包含在圆形里,因此交集为整个正方形,面积为
d2
。
2.
2r<=d
,这时圆形被包含在正方形里,因此交集为圆形,面积为
πr2
。
3.
otherwise
,这时交集为4个高为
d
,腰为
#include <cstdio>
#include <cmath>
const double PI = acos(-1.0);
int main() {
double d, r;
scanf("%lf %lf",&d,&r);
if (2 * r <= d) // a whole circle area.
printf("%.3lf\n", PI * r * r);
else if (r * r * 2 >= d * d) // the square is contained in the circle.
printf("%.3lf\n", d * d);
else {
double alpha = 2 * acos(d / (2 * r));
double area = r * r * alpha / 2 - r * r * sin(alpha) / 2;
printf("%.3lf\n", PI * r * r - 4 * area);
}
return 0;
}