zoukankan      html  css  js  c++  java
  • 「CodeForces

    BUPT 2017 summer training (16) #2B

    题意

    有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数。

    题解

    这题要求严格包含的路径。实际上答案就是不严格包含的+4步。
    也可以加上每个点上下左右的四个点再跑凸包。
    最少步数就是凸包上相邻两点的(max(Delta x,Delta y))之和。
    其实这题也可以不求凸包,用平行于对角线的四条边非严格包含地去围这些点,若相交的地方不在格点上,我们四边都往外扩展后,也是+4步就得到严格包含的路径。
    然后因为斜着一步和水平的一步是等价的,所以步数其实就是四边形路径的x差值*2加4。
    设a=max(x+y),c=min(x+y),b=max(x-y),d=min(x-y)。四条边分别是x+y=a,x+y=c,x-y=b,x-y=d。
    然后求出四个交点的最大的x就是(a+b)/2,最小的x就是(c+d)/2
    于是x差值*2就是((a+b)/2-(c+d)/2)*2=a+b-c-d

    代码

    #include <cstdio>
    #include <algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    int main(){
    	int n,a,b,c,d;
    	a=b=-inf;c=d=inf;
    	scanf("%d",&n);
    	for(int i=1,x,y;i<=n;++i){
    		scanf("%d%d",&x,&y);
    		a=max(x+y,a);
    		b=max(x-y,b);
    		c=min(x+y,c);
    		d=min(x-y,d);
    	}
    	printf("%d",a+b-c-d+4);
    	return 0;
    }
    
  • 相关阅读:
    搭建公共DNS服务器[转]
    zabbix3.4 yum快速安装
    centos7安装图形化界面并远程连接
    记一次排查黑客入侵
    centos6安装图形界面并远程连接
    树莓派做NAS
    document.documentElement.scrollTop||document.body.scrollTop;
    矩阵连乘
    母函数详解
    Catalan 数
  • 原文地址:https://www.cnblogs.com/flipped/p/7208402.html
Copyright © 2011-2022 走看看