首页 > 其他分享 >破防了,遂刷一节课圆锥曲线放松大脑,原因如图

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

时间:2024-09-23 20:35:35浏览次数:8  
标签:fixed return int 破防 ans operator frac 一节课 圆锥曲线

来个有缘人

#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 ab
    node 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();
}

标签:fixed,return,int,破防,ans,operator,frac,一节课,圆锥曲线
From: https://www.cnblogs.com/HaneDaCafe/p/18427838

相关文章

  • 9.10第一节课 巧用搜索引擎
    第一节课9.10巧用搜索引擎1.1文本资源的获取与加工先搜索什么是搜索引擎目录式搜索引擎网易全文式搜索引擎百度谷歌必应使用技巧:提炼搜索关键词、细化搜索软件使用“-”符号关键词a+空格+-关键词b使用FILETYPE\SITE和INTITLE指令:•使用filetype指令可以查询特定......
  • 最让程序员破防的12句话,你来补充下一句。
    1、这个应该很简单吧,要那么久?2、之前有一个类似的功能,拿过来改一下就好了。3、产品说这个功能,已经给客户沟通好了,你想办法看怎么实现。4、这个需求真的是最终版了。5、要不我们还是使用上一版设计?6、先做出来看看,不合适再改。7、我就要这种效果,怎么实现是你的问题。8、你就......
  • “AI能不能代替某某职业”,到底谁在破防?
    前几天,公司在午间分享时谈到一个有趣的辩题:“AI能不能代替产品经理”,不仅双方辩手打了个你来我往,就连下面的吃瓜群众也进入红温状态。“AI能不能代替xx”已经成为一个普遍的话题,在某乎上随手一刷就是不同的职业,人在看手机时候就悄悄破防了。产品经理能想到这个话题也不足为奇,毕竟......
  • 破防了!加班狗常用的TOP4 PDF编辑器2024年集锦
    我们天天都得跟一堆文件打交道,尤其是PDF文件。PDF的好处是,不管在哪个设备上打开,内容和格式都保持原样,而且不容易被改。不过,有时候这也让人挺头疼的,因为想改点什么就麻烦了。幸好,技术一直在进步,现在市面上有很多好用的PDF编辑器,它们就像魔法棒,让编辑文档变得轻松又快速。今天,我......
  • 七夕破防记(当然了破防的不是我)
    我没事,但是我有个哥们你知道吧,我跟他情同手足,我怕他不小心看到破防了。我当然没事啊,哈哈哈哈,这期删了呗,这跟我朋友的经历有点相似,不过我是无所谓的,没什么感觉,我不轻易破防的,但是我一个朋友可能有点汗流浃背了,他不太舒服想睡了,当然不是我哈,我一直都是行的,以一个旁观者的心态看吧,也......
  • 基于Fail2ban及iptables的SSH端口爆破防御方案
    君衍.一、本篇介绍二、Fail2ban1、简介2、工作方式3、优缺点4、工作原理5、目录结构6、功能特点三、更改默认SSH端口1、更改配置文件2、重启服务四、SSH日志审计1、连接失败的IP2、失败IP次数排行3、连接成功的IP4、成功IP次数排行五、Fail2ban1、安装2、配置3、日志......
  • GIT一节课
    这是第一篇一节课系列,会不断更新迭代。GIT是一个开源的分布式版本控制系统,如上图先理解GIT的4个工作区域:workspace:工作区index/Stage:暂存区Repository:本地仓库Remote:远程仓库刚写的代码都是在工作区,执行add命令后就是提交到了暂存区,再执行commit命令后就把代码提......
  • 菜品分类,做这个公共字段填充我真破防了
     第一个小节不属于业务功能开发,偏向技术的公共字段:在业务表中有很多相同的字段,例如创建人,创建时间,修改人,修改时间,在维护数据时候,都需给这些字段赋值,这样程序之中出现很多重复的代码  使用切面统一处理 枚举:可以标识当前操作的类型(insert或update)AOP:切面,统一拦截map......
  • 圆锥曲线15
    简单直白的面积问题已知椭圆\(C:\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1(a>b>0)\)的左定点合右焦点分别为\(Q,F\),且\(|QF|=3\),点\(D(0,1)\)满足\(\overrightarrow{DQ}\cdot\overrightarrow{DF}=-1\)(1)求\(C\)方程(2)过点\(D\)的直线\(l\)与\(C\)交于点\(A,B\)两点,与\(x\)轴交于......
  • 圆锥曲线15
    思路简单,计算量过大的一题,强行堆砌计算量已知抛物线\(C:y^2=2x\)的焦点为\(F\),其准线\(l\)与\(x\)轴交于点\(P\),过点\(P\)的直线与\(C\)交于点\(A,B\)(\(A\)在\(B\)的左侧)(1)若点\(A\)是线段\(PB\)的中点,求\(A\)的坐标(2)若直线\(AF\)与\(C\)交于点\(D\),记\(\triangleBDP\)内......