当前位置: 代码迷 >> 综合 >> XTUOJ-1379 折纸-贰
  详细解决方案

XTUOJ-1379 折纸-贰

热度:27   发布时间:2023-12-05 02:04:24.0

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的面积=\frac{1}{2}*BC*CP=\frac{1}{2}*BC*\frac{p}{q}*CD=\frac{1}{2}*4*\frac{p}{q}*4=\frac{8p}{q}

S△BCP=\frac{8p}{q}


△ABF的面积(使用公式S=1/2*a*b*sinc)

S△ABF=\frac{1}{2}*AB*AF*sin45°  

我们直接把AB=4代入即可,角度45°代入进去(因为是边长为4的正方形)

那么怎么求AF呢??用相似三角形的结论,三角形BFA与三角形PFC为相似三角形

所以\frac{AB}{CP}=\frac{AF}{FC}=\frac{CD}{CP}=\frac{q}{p}

AF=AC  *    \frac{AF}{AF+FC} =   AC  *   \frac{q}{p+q} 

AC=\sqrt{4*4+4*4}=4\sqrt{2}

将这些数据带入S△ABF =\frac{1}{2}*AB*AF*sin45°中,可得到一个关于p,q的表达式

S△ABF=\frac{8*q}{p+q}


将两个公式通分

S△ABF=\frac{8*q*q}{(p+q)*q}

S△BCP=\frac{8*p*(p+q)}{(p+q)*q}

多边形AFPD的面积等于16-S△ABF-S△BCP=\frac{8*p*q+8*q*q-8*p*p}{(p+q)*q}

S AFPD=\frac{8*p*q+8*q*q-8*p*p}{(p+q)*q}

后面只需要将这几个公式所得结果化简即可

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我,谢谢!)