E. Draw a triangle
题链
不难发现可以用叉积来求
我们假设A指向B的向量为(-b,a) 注意这里是 -b a
假设A指向C的向量为(x,y)
题目给出了AB坐标 我们就知道了第一个向量 我们只需要求x,y这个向量就可以了
S=1/2(ax+by)这里面就是一个线性同余了 他的最小值为gcd(a,b)
我们只需要exgcd求出一组x y即可
要是a b为负数也没关系 我们可以先给系数(-1)就可以了
最后再加上x1 y1即可
最后的最后记得特判ab为0的情况
void exgcd(int a,int b,int &x,int &y){
if(!b){x=1,y=0;return;}
else {exgcd(b,a%b,y,x),y-=a/b*x;}
}
void solve(){
int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;
if(x1==x2){
cout<<x1+1<<" "<<y1<<endl;
return;
}
if(y1==y2){
cout<<x1<<" "<<y1+1<<endl;
return;
}
int a=y2-y1,b=x1-x2;
int x,y,sx=1,sy=1;
if(a<0){
a=-a;
sx=-1;
}
if(b<0){
b=-b;
sy=-1;
}
exgcd(a,b,x,y);
cout<<x1+x*sx<<' '<<y1+y*sy<<endl;
}
标签:int,CCPC,exgcd,x2,桂林,2022,y1,x1,向量
From: https://www.cnblogs.com/ycllz/p/16951316.html