Description |
||
折纸-贰题目描述一张矩形纸张,在CD上取一点P,其中 |CP|=p/q*|CD|,我们沿BP折一下,再沿对角线AC折一下,两者交于F点,我们得到如下图所示的实线围成的三个不同的区域,分别记做a=△BCP,b=△ABF,c=□ADPF。请求a,b,c的面积之比。 输入第一行输入第一个整数T(1≤T≤10000),表示样例的个数。 以后每行一个样例,为两个整数p,q(1≤p<q≤10000),且p与q互质。 输出每行输出一个样例的结果,为三个整数a,b,c, 表示三部分的面积比,且保证三个数两两互质。每个数之间有一个空格,行尾无空格。 样例输入1 1 2 样例输出3 4 5 |
初始疑问:矩形的边长是随机的吗?还是和图中所给边长一样?
初始思路:求P点坐标,求F点坐标,打算求出两个三角形的面积(运用公式S=1/2*d*H),然后用矩形面积减去两个三角形的面积得到多边形的面积,然后求其比例,后来发现操作过于复杂,不想写下去。
另外的思路:假设特殊情况下的矩形,如边长为4的正方形,然后开始我们的计算。
△BCP的面积=*BC*CP=*BC**CD=*4**4=
S△BCP=
△ABF的面积(使用公式S=1/2*a*b*sinc)
S△ABF=*AB*AF*sin45°
我们直接把AB=4代入即可,角度45°代入进去(因为是边长为4的正方形)
那么怎么求AF呢??用相似三角形的结论,三角形BFA与三角形PFC为相似三角形
所以===
AF=AC * = AC *
AC==4
将这些数据带入S△ABF =*AB*AF*sin45°中,可得到一个关于p,q的表达式
S△ABF=
将两个公式通分
S△ABF=
S△BCP=
多边形AFPD的面积等于16-S△ABF-S△BCP=
S AFPD=
后面只需要将这几个公式所得结果化简即可
AC代码:
#include <stdio.h>
int maxyue(int a,int b);
int main(){int T;int p,q,max;int sbcp,sabf,sadpf;scanf("%d",&T);while(T--){scanf("%d %d",&p,&q); sbcp=8*p*(p+q);sabf=8*q*q;sadpf=8*p*q+8*q*q-8*p*p;max=maxyue(sbcp,maxyue(sabf,sadpf));sbcp=sbcp/max;sabf=sabf/max;sadpf=sadpf/max;printf("%d %d %d\n",sbcp,sabf,sadpf);}}
int maxyue(int a,int b){int r;do{r=a%b;a=b;b=r;}while(r!=0);return a;
}
(第一次写这种东西,如果发现错误可以dd我,谢谢!)