破防了,遂刷一节课圆锥曲线放松大脑,原因如图

news/2024/9/23 20:37:24

来个有缘人

#include<bits/stdc++.h>
using namespace std;
#define int __int128
void _print(__int128 x,bool first=true){if(x<0){putchar('-');_print(-x,false);return;}if(x==0){if(first) putchar('0');return;}_print(x/10,false);putchar((int)(x%10)+'0');
}
#define abs(x) (x>0?x:-x)
class frac{private:int z,m;public:frac(int x=0,int y=1){z=x,m=y;fixed();}frac fixed(){int gcd=__gcd(abs(z),abs(m));if(m<0){m*=-1;z*=-1;}if(z==0){m=1;return *this;}if(gcd==0) return *this;z/=gcd;m/=gcd;return *this;}frac upside(){return frac(m,z);}frac operator = (pair<int,int>A){z=A.first;m=A.second;fixed();return *this;}frac operator + (frac A){return (frac(z*A.m+m*A.z,m*A.m)).fixed();}frac operator * (frac A){// cout<<"multi ";this->print();putchar(' ');// A.print();putchar('=');int gcd1=__gcd(z,A.m);int gcd2=__gcd(A.z,m);frac ans=(frac((z/gcd1)*(A.z/gcd2),(m/gcd2)*(A.m/gcd1))).fixed();// ans.print();putchar('\n');return ans;}frac operator / (frac A){return (*this*A.upside()).fixed();}frac operator -(){return frac(-z,m);}frac operator -(frac A){return *this+(-A);}bool operator <(frac A){return z*A.m<A.z*m;}bool operator ==(frac A){return z*A.m==A.z*m;}bool operator >(frac A){return !(*this==A and *this<A);}void print(){fixed();_print(z);putchar('/');_print(m);// cout<<z<<"/"<<m<<endl;}frac _abs(){return frac(abs(z),abs(m));}long double it(){return z*1.0/m;}
};
struct node{signed x,y;
}p[1000001],s[1000001];
signed n;
double ans,mid;
double multi(node a1,node a2,node b1,node b2){return (a2.x-a1.x)*(b2.y-b1.y)-(b2.x-b1.x)*(a2.y-a1.y);
}
double dis(node p1,node p2){return sqrt((double)(p2.y-p1.y)*(p2.y-p1.y)*1.0+(double)(p2.x-p1.x)*(p2.x-p1.x)*1.0);
}
bool cmp(node p1,node p2){double tmp=multi(p[1],p1,p[1],p2);if(tmp>0) return true;if(tmp==0 and dis(p[0],p1)<dis(p[0],p2)) return true;return false;
}
int sqr_vector_dis(node a){return (__int128)a.x*a.x+(__int128)a.y*a.y;
}
int vector_multi(node a,node b){return abs((__int128)a.x*b.x+(__int128)a.y*b.y);
}
void print_node(node a){// cout<<"("<<a.x<<","<<a.y<<") ";
}
frac dist(node a,node b,node c){// cout<<"dist ";print_node(a);print_node(b);print_node(c);putchar(' ');//distance from c to line abnode vector1={b.x-a.x,b.y-a.y};node vector2={b.x-c.x,b.y-c.y};// cout<<"::";print_node(vector1);print_node(vector2);frac ans=frac(vector_multi(vector1,vector2)*vector_multi(vector1,vector2),sqr_vector_dis(vector1)*sqr_vector_dis(vector2));ans=-ans+1;ans=ans*sqr_vector_dis(vector2);ans=ans*frac(1,4);// cout<<"= ";ans.print();putchar('\n');return ans;
}
signed main(){freopen("a.in","r",stdin);freopen("a.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d%d",&p[i].x,&p[i].y);if(i!=1 and p[i].y<p[1].y){mid=p[1].y;p[1].y=p[i].y;p[i].y=mid;mid=p[1].x;p[1].x=p[i].x;p[i].x=mid;}} sort(p+2,p+1+n,cmp);s[1]=p[1];int tot=1;for(int i=2;i<=n;i++){while(tot>1 and multi(s[tot-1],s[tot],s[tot],p[i])<=0) tot--;tot++;s[tot]=p[i];}s[tot+1]=p[1];int now=1;frac ans;for(int i=1;i<=tot;i++){//s[i] s[i+1]while(dist(s[i],s[i+1],s[now]).it()<dist(s[i],s[i+1],s[(now==tot?1:now+1)]).it()){now=(now==tot?1:now+1);}if(dist(s[i],s[i+1],s[now]).it()>ans.it()){ans=dist(s[i],s[i+1],s[now]);}}ans.print();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

9月23日总结

今天上了数据结构课,学习了线性表的增删改查;正式上了第一节Java课,学习了些Java的基本知识,运行了代码,部分运行结果如下:

动手实验 1

请运行以下代码(TestDouble.java) public class TestDouble { public static void main(String args[]) {System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));System.out.println("4.015 *…

以数赋能实景三维创新“科技+文旅”

在数字化时代,科技与文化的融合为我们带来了无限可能。今天,我们将探讨如何利用实景三维技术,推动“科技+文旅”的创新发展。1. 实景三维技术概述实景三维技术,是一种集成了遥感、地理信息系统(GIS)、三维建模等技术的前沿科技。它能够将现实世界的地理信息以三维形式数字…

什么是原子操作?Java如何实现原子操作?

1.什么是原子操作? 我们在学习MYSQL时就了解过原子性,即整个事务是不可分割的最小单位,事务中任何一个语句执行失败,所有已经执行成功的语句也要回滚,整个数据库状态要恢复到执行任务前的状态。Java中的原子性其实就是和数据库中说的相似,就是不可在分割,在我们的多线程…

JAVA基础之八-方法变量作用域和编译器

本文主要讨论方法中变量作用域。不涉及类属性变量、静态变量、线程变量共享等。 虽然知道某类变量的作用域非常重要,但是没有太多需要说的,因为许多东西是显而易见,不言自明。在大部分情况下,或者在老一点版本中,java语法看起来都比较正常,或者说相对古典。 但是随着JAVA…

信息学奥赛复赛复习01-CSP-J2019-01-字符、字符数组、字符串、string、字符串读取

信息学奥赛复赛复习01-CSP-J2019-01-字符、字符数组、字符串、string、字符串读取 PDF文档公众号回复关键字:202409231 2019 CSP-J 题目1 数字游戏 [题目描述] 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。 注…

学习高校课程-软件工程-理解需求(ch8)

REQUIREMENTS ENGINEERING 需求工程 Requirements engineering encompasses seven distinct tasks: inception, elicitation,elaboration, negotiation, specification, validation, and management Inception 启动 At project inception, you establish a basic understanding…