`
forestking
  • 浏览: 43927 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Don't Break the Nile

 
阅读更多
package year2014.round2

import scala.io.Source

object DontBreakTheNile extends App {

  val file = "src/scala/codejam/year2014/round2/C-small-practice.in"

  val lines = Source.fromFile(file).getLines()

  val T = lines.next().toInt

  val neighbors = Array((0, -1), (1, 0), (0, 1), (-1, 0))
  val directionMap = Map(0 -> Array(3, 0, 1), 1 -> Array(0, 1, 2), 2 -> Array(1, 2, 3), 3 -> Array(2, 3, 0))

  def process(t: Int): Unit =
    if (t <= T) {
      val line = lines.next().split("\\s+").map(_.toInt)
      val w = line(0)
      val h = line(1)
      val b = line(2)

      val grid = Array.fill(h)(Array.fill(w)(0))

      def fill(x: Int): Unit =
        if (x < b) {
          val cord = lines.next().split("\\s+").map(_.toInt)
          val x0 = cord(0)
          val y0 = cord(1)
          val x1 = cord(2)
          val y1 = cord(3)

          for {
            i <- y0 to y1
            j <- x0 to x1
          } {
            grid(i)(j) = -1
          }

          fill(x + 1)
        }

      fill(0)

      def nextCell(i: Int, j: Int, dir: Int): Option[(Int, Int, Int)] = {
        val dirs = directionMap(dir)
        dirs.find(d => {
          val (di, dj) = neighbors(d)
          val (x, y) = (i + di, j + dj)
          (x >= 0 && x < h && y >= 0 && y < w && grid(x)(y) == 0)
        }).map(d => {
          val (di, dj) = neighbors(d)
          (i + di, j + dj, d)
        })
      }

      def flow(i: Int, j: Int, dir: Int, path: List[(Int, Int, Int)]): Boolean =
        if (i == h - 1) true
        else {
          nextCell(i, j, dir) match {
            case Some((x, y, d)) =>
              grid(x)(y) = 1
              flow(x, y, d, (i, j, dir) :: path)
            case None if path.isEmpty => false
            case None =>
              val (x, y, d) = path.head
              flow(x, y, d, path.tail)
          }
        }

      val max =
        (0 until w).foldLeft(0)((cnt, j) => {
          if (grid(0)(j) == 0) {
            grid(0)(j) = 1
            if (flow(0, j, 1, Nil)) {
              cnt + 1
            } else cnt
          } else cnt
        })

      println(s"Case #$t: $max")
      process(t + 1)
    }

  process(1)
}

 

分享到:
评论

相关推荐

    Agricultural fragmentation of the Nile Delta; a modeling

    ### 农业碎片化对尼罗河三角洲的影响:一种模型方法 #### 摘要与背景 在当今世界资源日益稀缺的情况下,确保充足且适宜的食物生产成为一个巨大的挑战。据估计,全球近三分之二的人口面临着食物短缺的问题,超过三...

    nile.chat:社区聊天

    【nile.chat:社区聊天】项目是一个用于创建和参与社区聊天环境的应用程序,它利用了现代Web技术,如Node.js、Socket.IO、Redis以及JavaScript,为用户提供实时的、交互式的交流平台。在这个项目中,Docker Compose...

    Python库 | cairo_nile-0.0.8-py3-none-any.whl

    标题中的"Python库 | cairo_nile-0.0.8-py3-none-any.whl"指的是一款名为cairo_nile的Python库,其版本号为0.0.8,适用于Python 3解释器,且不依赖特定的硬件架构。这款库以.whl格式提供,这是一种预编译的Python包...

    Gift-of-The-Nile::scroll:尼罗河礼物是垂直的时间轴,可让您浏览古埃及人物

    尼罗河礼物 一切从哪里开始尼罗河礼物是一个垂直的时间轴,使您可以浏览古埃及字符(神,法老王),了解它们的详细信息,它们的故事,图像和视频,并带有完整动画和插图化的字符,还可以查找字符的纪念碑和顺序直接...

    基础电子中的高温度8-位元可编程比较器NILE介绍

    **NILE高温度8-位元可编程比较器详解** NILE是一款专为高温环境设计的8-位元可编程比较器,其独特的特性和宽泛的工作温度范围使其在多种严苛的应用场景中表现出色。这款比较器能够在-55°C至225°C的极端温度区间内...

    Nile:尼罗河-区块链IP市场

    Nile Marketplace组件使用基于区块链的智能合约为知识产权商标,版权,专利,商业秘密提供交易平台。 它可用于使用不同的定价模型进行拍卖,并根据贸易交易得出结论,包括成功收到交易项目。 目标 Nile Marketplace...

    【金榜学案】2014版八年级英语下册 Unit 7 What’s the highest mountain in the wor

    - **尼罗河(The Nile)**:世界上最长的河流,全长6,671千米。 - **里海(The Caspian Sea)**:世界上最大的内陆湖,深度达1,025米。 - **撒哈拉沙漠(the Sahara)**:世界上最大的热沙漠。 2. **英语语法** ...

    Lost, but found with nile red.pdf

    首先,标题中提到的“Lost, but found with nile red”暗示了一种新颖的微塑料检测和定量方法,它使用尼罗红染色剂。尼罗红是一种荧光染料,常用于生物样品染色,因为它可以穿透细胞膜,并能与多种细胞内的物质结合...

    新人教版高二英语上册入学考试题[精选].doc

    - "The students don’t realize the use _we make of_ the information." 这里是定语从句,"the use"是先行词,关系代词"which"在从句中作make的宾语,整个从句解释了"use"的具体含义。 6. **动词hang的用法**: ...

    ssh-nile-开源

    【SSH-Nile 开源项目详解】 SSH-Nile 是一个基于SSH协议传播的多阶段蠕虫,它的设计目标是在网络中的主机之间执行命令并复制文件,特别适用于集群环境。这个项目的核心特点是利用了SSH的安全性和可靠性,同时具备...

    BlueNile - 图像频域过滤:在频域中过滤图像。-matlab开发

    该软件可以在频域中自动和手动过滤图像(模式抑制和强调、图像平滑和边缘增强)。 查看应用示例和下载 PC 版本,请访问 http://mywebpage.netscape.com/atanasiuvlad/bluenile/

    (完整版)新概念英语青少版2B期末测试卷.pdf

    - "The Nile is longer than the Amazon." 表示“尼罗河比亚马逊河长”。 7. **疑问词的使用**: - "How far"询问距离,"How long"询问持续时间,"What's the height"询问高度。 8. **反义疑问句**: - "It isn...

    athletic-playground-nile

    标题“athletic-playground-nile”暗示这可能是一个与体育或运动场相关的项目,而“nile”可能是项目名的一部分,也可能与尼罗河有关,但这在IT领域中通常用于象征性命名。从描述中我们可以得知,这是一个由Webhook...

    最新闽教版英语六年级下册教案.doc

    5. the Yangtze River:长江的名称,需要使用定冠词 the,如:the Yellow River 或 the Nile。 6. 语音学习:本单元语音局部复习元音字母 a, e, i, o, u 在开音节中的读音。 7. go + -ing 形式:例如“go swimming...

    Nile:尼罗河的官方网站。 您将喝到的最新鲜的果汁

    【Nile:尼罗河的官方网站——探索最新的前端设计与技术】 尼罗河,这个名称在IT领域中可能并非指代我们熟知的那条非洲大河,而是代表着一个专注于提供最新鲜、最具创新性的前端设计和技术的平台。"Nile"在这里可能...

    初中英语比较级最高级练习题.doc

    - “in the world”、“in China”等短语用于限定最高级的范围,如“The Nile is the longest river in the world.”。 8. 形容词最高级与“the + 最高级”: - “Good health is the most important thing in ...

    Design and analysis of a range-extended acidity detector based on a Nile red laser with tandem cuvette system

    In light of the good lasing property and solvatochromism characteristic of Nile red/ethanol solution, we have obtained laser spectra of sulfuric acid in different concentrations doped in this ...

    RA mediates meiosis onset in germ cells of Nile tilapia, Oreochromis niloticus

    RA可能调控硬骨鱼类减数分裂的起始,董然然,蒋汶洮,视黄酸(retinoic acid, RA)信号通路在哺乳类、鸟类及两栖类减数分裂起始中起着重要作用。RA水平受其合成酶和分解酶的影响。但RA信号通

Global site tag (gtag.js) - Google Analytics