4th Jilin Province Collegiate Programming Contest-Problem B: The Farmer’s Heritage

题型:计算几何

题意

        首先题目花了20行讲了一个寓言故事(-_-|||20行英语啊,是有多寂寞。。。),然后花了两三行讲了有用的东西。

           讲三个兄弟要分一块三角形的地,老大能分1/2,老二能分1/3,老三能分1/6。

           现在给出三个坐标分别代表老大、老二、老三,现将土地分为三个三角形。以老大的坐标的点的对边为边缘占总面积为1/3的地是老大的,以老二的坐标的点的对边为边缘占总面积为1/3的地是老二的,以老三的坐标的点的对边为边缘占总面积为1/6的地是老三的,求出中间的那个点的坐标。

分析

            乍看此题,均会感觉应该硬算,即通过将边平移相应的比例的高,求出交点就是答案。方法是可行的,但是考虑的内容较多,不小心写错还不好找出错误,即使写对了,一两千B的代码也是要写一会儿的。。。

             那么,我们就来寻求一个更好的解决办法。

             仔细研究,可以想到,如果想要这样划分,那么三个三角形的高肯定是大三角形对应的高的1/2、1/3、1/6。

             那么,画一下图,就可以发现,若是分别做出大三角形各边的中位线、三等分线、六等分线,这三条线会交于 一点,而这一点就是要求的那个点。

             那么现在就好办了,可以通过向量来算出答案,不到300B,言简意赅。

代码

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	double ax,ay,bx,by,cx,cy;
	while(cin>>ax>>ay>>bx>>by>>cx>>cy){
		ax=(ax-cx)/2;
		ay=(ay-cy)/2;
		bx=(bx-cx)/3;
		by=(by-cy)/3;
		cx+=ax+bx;
		cy+=ay+by;
		printf("%.3lf %.3lf\n",cx,cy);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值