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)
}
分享到:
相关推荐
2. **基础设施建设**:道路、桥梁等基础设施的发展也会导致土地被割裂,进而影响农业生产。 3. **政策与法律**:土地所有权的变化、继承法等因素也会促使土地被分割。 #### 土地碎片化对农业的影响 1. **灌溉系统...
【nile.chat:社区聊天】项目是一个用于创建和参与社区聊天环境的应用程序,它利用了现代Web技术,如Node.js、Socket.IO、Redis以及JavaScript,为用户提供实时的、交互式的交流平台。在这个项目中,Docker Compose...
标题中的"Python库 | cairo_nile-0.0.8-py3-none-any.whl"指的是一款名为cairo_nile的Python库,其版本号为0.0.8,适用于Python 3解释器,且不依赖特定的硬件架构。这款库以.whl格式提供,这是一种预编译的Python包...
当输出达到1/2最低有效字节(10毫伏)时,比较器已完成了超速响应,这使得NILE成为实时信号处理的理想选择。 在电源需求方面,NILE仅需一个正5V电源,并且需要一个外置的正5V参考电压。这种低功耗设计使得NILE即使...
尼罗河礼物 一切从哪里开始尼罗河礼物是一个垂直的时间轴,使您可以浏览古埃及字符(神,法老王),了解它们的详细信息,它们的故事,图像和视频,并带有完整动画和插图化的字符,还可以查找字符的纪念碑和顺序直接...
Nile Marketplace组件使用基于区块链的智能合约为知识产权商标,版权,专利,商业秘密提供交易平台。 它可用于使用不同的定价模型进行拍卖,并根据贸易交易得出结论,包括成功收到交易项目。 目标 Nile Marketplace...
- **尼罗河(The Nile)**:世界上最长的河流,全长6,671千米。 - **里海(The Caspian Sea)**:世界上最大的内陆湖,深度达1,025米。 - **撒哈拉沙漠(the Sahara)**:世界上最大的热沙漠。 2. **英语语法** ...
- "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”暗示了一种新颖的微塑料检测和定量方法,它使用尼罗红染色剂。尼罗红是一种荧光染料,常用于生物样品染色,因为它可以穿透细胞膜,并能与多种细胞内的物质结合...
2. N阶段蠕虫机制: SSH-Nile 采用了N阶段的传播策略,这意味着它会在多个步骤中执行不同的任务,例如扫描网络、验证目标主机、执行命令以及复制文件。这种多阶段的设计使得蠕虫更加复杂,更难以被单一的防御手段...
- "The students don’t realize the use _we make of_ the information." 这里是定语从句,"the use"是先行词,关系代词"which"在从句中作make的宾语,整个从句解释了"use"的具体含义。 6. **动词hang的用法**: ...
该软件可以在频域中自动和手动过滤图像(模式抑制和强调、图像平滑和边缘增强)。 查看应用示例和下载 PC 版本,请访问 http://mywebpage.netscape.com/atanasiuvlad/bluenile/
标题“athletic-playground-nile”暗示这可能是一个与体育或运动场相关的项目,而“nile”可能是项目名的一部分,也可能与尼罗河有关,但这在IT领域中通常用于象征性命名。从描述中我们可以得知,这是一个由Webhook...
5. the Yangtze River:长江的名称,需要使用定冠词 the,如:the Yellow River 或 the Nile。 6. 语音学习:本单元语音局部复习元音字母 a, e, i, o, u 在开音节中的读音。 7. go + -ing 形式:例如“go swimming...
【Nile:尼罗河的官方网站——探索最新的前端设计与技术】 尼罗河,这个名称在IT领域中可能并非指代我们熟知的那条非洲大河,而是代表着一个专注于提供最新鲜、最具创新性的前端设计和技术的平台。"Nile"在这里可能...
- “in the world”、“in China”等短语用于限定最高级的范围,如“The Nile is the longest river in the world.”。 8. 形容词最高级与“the + 最高级”: - “Good health is the most important thing in ...
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可能调控硬骨鱼类减数分裂的起始,董然然,蒋汶洮,视黄酸(retinoic acid, RA)信号通路在哺乳类、鸟类及两栖类减数分裂起始中起着重要作用。RA水平受其合成酶和分解酶的影响。但RA信号通