ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1044C题解

2022-08-07 10:00:46  阅读:135  来源: 互联网

标签:题目 周长 题解 long CF1044C 距离 三角形 我们


题目大意:

给你 \(n\) 个在平面直角坐标系内的点,然后求出 \(3,4,5...,n\) 边形的最大周长,任意两点间距离为曼哈顿距离。

题目分析:

显而易见,因为距离为曼哈顿距离,所以题目要求的东西就变成了由多个点组成的矩形的周长。

举个例子,如下图,假设我们选择这样四个点:

那么我们要求的矩形长这样:

得到了这个以后,我们还需要分三种情况考虑:

1. 当 \(k \geqslant 4\) 时即我们要求的是一个非三角形的最大周长时,这时就直接取横纵坐标的最大差值求和作为答案就行了。

这个的正确性显然,因为当我们求个非三角形时,就一定能取至少四个点,那么这时,我们一定能保证取到最大的差值。

2. 当 \(k=3\) 时即我们要求的是一个三角形的最大周长时,这时我们就无法像上面那样考虑,样例一就是一个例子。

所以,这个时候我们可以直接枚举求解。

注:

看到数据范围 \(-10^8 \leqslant x_i,y_i \leqslant 10^8\) 一定要记得开 long long。

这里给出核心部分代码:

int main()
{
    n=read();
    long long maxx=-1,minx=0x7f7f7f;
    long long maxy=-1,miny=0x7f7f7f;
    for(register int i=1;i<=n;i++)
    {
        x[i]=read(),y[i]=read();
        maxx=max(maxx,x[i]);
        minx=min(minx,x[i]);
        maxy=max(maxy,y[i]);
        miny=min(miny,y[i]);
    }
    long long sum=(maxx-minx+maxy-miny)*2;
    if(n==3)
    {
        cout<<sum;
        return 0;
    }
    for(register int i=1;i<=n;i++)
    {
        if(x[i]==maxx)
            a[1]=x[i],b[1]=y[i];
        if(x[i]==minx)
            a[2]=x[i],b[2]=y[i];
        if(y[i]==maxy)
            a[3]=x[i],b[3]=y[i];
        if(y[i]==miny)
            a[4]=x[i],b[4]=y[i];
    }
    long long maxn=0;
    for(register int i=1;i<=n;i++)
    {
        maxn=max(maxn,abs(x[i]-minx)+abs(y[i]-miny));
        maxn=max(maxn,abs(x[i]-minx)+abs(y[i]-maxy));
        maxn=max(maxn,abs(x[i]-maxx)+abs(y[i]-maxy));
        maxn=max(maxn,abs(x[i]-maxx)+abs(y[i]-miny));
	}
    cout<<maxn*2<<' ';
    for(register int i=4;i<=n;i++)
    {
        cout<<sum<<' ';
    }
	return 0;
}

标签:题目,周长,题解,long,CF1044C,距离,三角形,我们
来源: https://www.cnblogs.com/yhx-error/p/16558507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有