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

Don't Break the Nile 2

 
阅读更多
package codejam.year2004.round2

import scala.io.Source
import scala.collection.mutable.Queue

object DontBreakTheNile2 extends App {

  val file = "src/main/scala/codejam/year2004/round2/C-large-practice.in"

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

  val T = lines.next().toInt

  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)

      trait Block {
        def dist(that: Block): Int
      }
      case class Building(x0: Int, y0: Int, x1: Int, y1: Int) extends Block {

        private def distX(that: Building) =
          if (x0 <= that.x1 && that.x0 <= x1) 0
          else if (x1 < that.x0) that.x0 - x1 - 1
          else x0 - that.x1 - 1

        private def distY(that: Building) =
          if (y0 <= that.y1 && that.y0 <= y1) 0
          else if (y1 < that.y0) that.y0 - y1 - 1
          else y0 - that.y1 - 1

        def dist(that: Block) = that match {
          case LeftBank => x0
          case RightBank => w - 1 - x1
          case b: Building => distX(b) max distY(b)
        }
      }
      case object LeftBank extends Block {
        def dist(that: Block) = that match {
          case b: Building => b.dist(this)
          case RightBank => w
        }
      }
      case object RightBank extends Block {
        def dist(that: Block) = that match {
          case b: Building => b.dist(this)
          case LeftBank => w
        }
      }

      def readBlock(i: Int, blocks: Map[Int, Block]): Map[Int, Block] =
        if (i == b + 2) blocks
        else if (i == b + 1) readBlock(i + 1, blocks + (i -> RightBank))
        else if (i == b) readBlock(i + 1, blocks + (i -> LeftBank))
        else {
          val cord = lines.next().split("\\s+").map(_.toInt)
          readBlock(i + 1, blocks + (i -> Building(cord(0), cord(1), cord(2), cord(3))))
        }

      val blocks = readBlock(0, Map.empty)
      val grid = Array.fill(b + 2)(Array.fill(b + 2)(0))

      for {
        i <- 0 until b + 2
        a = blocks(i)
        j <- (i + 1) until b + 2
        b = blocks(j)
        d = a.dist(b)
      } {
        grid(i)(j) = d
        grid(j)(i) = d
      }

      def min(xs: Array[Int], i: Int, m: Int, checked: Set[Int]): Int =
        if (i >= xs.length) m
        else {
          if (checked.contains(i)) min(xs, i + 1, m, checked)
          else if (m < 0 || xs(m) > xs(i)) min(xs, i + 1, i, checked)
          else min(xs, i + 1, m, checked)
        }

      def bfs(dist: Array[Int], checked: Set[Int]): Int = {
        val i = min(dist, 0, -1, checked)
        if (i == b + 1) dist(i)
        else {
          val v = dist(i)
          for {
            j <- 0 until b + 2
            if (j != i && !checked.contains(j))
          } {
            if (v + grid(i)(j) < dist(j)) {
              dist(j) = v + grid(i)(j)
            }
          }
          bfs(dist, checked + i)
        }
      }

      val dist = Array.fill(b + 2)(w)
      dist(b) = 0

      val minCut = bfs(dist, Set.empty)

      println(s"Case #$t: $minCut")

      process(t + 1)
    }

  process(1)

}  
分享到:
评论

相关推荐

    Agricultural fragmentation of the Nile Delta; a modeling

    2. **基础设施建设**:道路、桥梁等基础设施的发展也会导致土地被割裂,进而影响农业生产。 3. **政策与法律**:土地所有权的变化、继承法等因素也会促使土地被分割。 #### 土地碎片化对农业的影响 1. **灌溉系统...

    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包...

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

    当输出达到1/2最低有效字节(10毫伏)时,比较器已完成了超速响应,这使得NILE成为实时信号处理的理想选择。 在电源需求方面,NILE仅需一个正5V电源,并且需要一个外置的正5V参考电压。这种低功耗设计使得NILE即使...

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

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

    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. **英语语法** ...

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

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

    Lost, but found with nile red.pdf

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

    ssh-nile-开源

    2. N阶段蠕虫机制: SSH-Nile 采用了N阶段的传播策略,这意味着它会在多个步骤中执行不同的任务,例如扫描网络、验证目标主机、执行命令以及复制文件。这种多阶段的设计使得蠕虫更加复杂,更难以被单一的防御手段...

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

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

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

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

    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