zoukankan      html  css  js  c++  java
  • 【Luogu P2771】【USACO16JAN】Build Gates S

    开一个很大的将近3000*3000的数组,去作为地图使用。

    然后把起点放到一个比较中间的位置,因为Farmer John会向四个方向走。

    之后O(n)扫一遍,对于每一个指令去模拟他走的过程。

    最重要的是判断交点,以此来确定联通块的个数。

    需要注意的问题:一个点可能在不同的方向意义上算作不同的交点。

    简单来说,就是这个点是可以从其上下左右四个点走来的,那么如果从不同的点走到这个点,就有可能形成不同的联通块。

    所以怎么做?

    记录走到的每个点是由哪一个方向走来的就行。

    开一个三维的桶:cz[x][y][z]=1表示x,y这个点已经由z方向延伸过。

    那么每次找到交点就只需要判断该方向上这个点有没有来过就可以了。

    还有一个需要注意的问题,就是如何标记方向

    首先,我们如果是从A点走到B点,那么B点的A到B这个方向就要被标记。

    同时,从A到B实际上是等效于从B到A的,所以我们也要标记A点的B到A的方向。

    -------------------以上内容摘抄于https://87942.blog.luogu.org/jian-men(有删改、划重点)-----------------------------

    以下内容为本人添加

    注意:对于当前走到(x,y),方向为z,判断同方向是否来过即可,不要判断反方向。如图:

    “标记A点的B到A的方向”:

     

  • 相关阅读:
    php计算utf8字符串长度
    php和js字符串的acsii码函数
    快速排序的php实现
    bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数
    bzoj 1485 [HNOI2009]有趣的数列 卡特兰数
    bzoj 4173 打表???
    bzoj [Noi2002]Savage 扩展欧几里得
    bzoj 3505 [Cqoi2014]数三角形 组合
    bzoj 2820 莫比乌斯反演
    Travel 并查集
  • 原文地址:https://www.cnblogs.com/xzs123456/p/13448211.html
Copyright © 2011-2022 走看看