XTUOJ-1379 折纸-贰

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值