[Swust OJ 771]--奶牛农场(几何题,画图就好)

 

题目链接:http://acm.swust.edu.cn/problem/771/

 

 Description

将军有一个用栅栏围成的矩形农场和一只奶牛,在农场的一个角落放有一只矩形的箱子,有一天将军要出门,他就把奶牛用一根绳子套牢,然后将绳子的另一端绑到了那个箱子不靠栅栏的角上,现在给定箱子的长和宽,绳子的长度,你的问题是计算奶牛能够到达的面积。

 
Input

有多组测试数据。 每一组数据为一行,三个整数,L(0<=L<=500),M,N(1<=M,N<=500),分别表示绳子的长度,箱子的两边长度。假设农场无限大。

 
Output

对于每一组测试数据,输出奶牛能够到达的面积,保留两位小数。

 
Sample Input
1 1 1
Sample Output
 
2.36

解题思路:就一个几何题,画图就可以了,可以看看下面的图的分析
 
 
 
 
 
 
 
 
 
代码如下:
 1 //箱子在角落里---、--
 2 #include <stdio.h>
 3 #include <math.h>
 4 #define  PI  acos(-1.0)
 5 #define minn(a,b) a<b?a:b
 6  
 7 int main() {
 8     double L, M, N, area;
 9     while (scanf("%lf %lf %lf", &L, &M, &N) != EOF) {
10         if (L <= M&&L <= N)
11             area = 0.75 * PI * L * L;
12         //一个三角形,加一个扇形
13         else if (L <= M || L <= N){
14             M = minn(M, N);
15             area = (sqrt((L * L) - (M * M)) * M) / 2.0;
16             N = (acos(M / L) * (180.0 / PI));
17             area += (270.0 - N) / 360.0 * PI * L * L;
18         }
19         //两个三角形,加一个扇形
20         else {
21             area = sqrt(L * L - M * M) * M / 2.0;
22             area += sqrt(L * L - N * N) * N / 2.0;
23             area += (270.0 - ((acos(M / L) + acos(N / L)) * (180.0 / PI))) / 360.0 * PI * L * L;
24         }
25         printf("%.2lf\n", area);
26     }
27     return 0;
28 }

 

 
posted @ 2015-06-22 15:27  繁夜  阅读(581)  评论(0编辑  收藏  举报