一叶浮萍归大海

人生何处不相逢

数学题

在这里插入图片描述
在这里插入图片描述

可以证明
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所以我们每次把角度尽量增大

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;

long long x_0,y_0,x_1,y_1;

double dis(long long x,long long y){
	return 	sqrt(x*x+y*y);
}

double P(long long x_0,long long y_0,long long x_1,long long y_1){
	double S=(x_0*x_1+y_0*y_1+0.0)/(sqrt(x_0*x_0+y_0*y_0)*sqrt(x_1*x_1+y_1*y_1)+0.0);
	return S;
}

int main(){
	freopen("math.in","r",stdin);
	freopen("math.out","w",stdout);
	while(scanf("%lld%lld%lld%lld",&x_0,&y_0,&x_1,&y_1)!=EOF){
		while(P(x_0,y_0,x_1,y_1)>0.5||P(x_0,y_0,x_1,y_1)<0){
			if(dis(x_0,y_0)>dis(x_1,y_1)) swap(x_0,x_1),swap(y_0,y_1);
			double d0=dis(x_0,y_0),d1=dis(x_1,y_1),ita=P(x_0,y_0,x_1,y_1);
			if(ita<0){
				x_0=-x_0,y_0=-y_0; 
				continue;
			}
			if(P(x_0,y_0,x_1,y_1)>0.5){
				long long lda=d1*ita/d0+0.5;
				x_1=x_1-x_0*lda;
				y_1=y_1-y_0*lda;
			}
		}
		printf("%lld\n",min(x_0*x_0+y_0*y_0,x_1*x_1+y_1*y_1));
	}
}
posted @ 2019-08-14 07:49  Chandery  阅读(159)  评论(0编辑  收藏  举报