• 「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;
    }
    
  • 相关阅读:
    更新我电脑的编译器之Java语言
    HTML/CSS基础
    查找元素的杀手锏xpath
    错误日志的实时抓取保证代码质量
    Splinter常用api
    从底层向上理解Git
    infer运用实践
    流程图在测试用例编写中的运用
    2016小结
    Splinter 查找元素
  • 原文地址:https://www.cnblogs.com/flipped/p/7208402.html
Copyright © 2020-2023  润新知