Codesecrof 350 记录

目录

  • 综述
  • C Bombs / 炸弹
  • D Looking for Owls / 寻找猫头鹰
  • E Wrong Floyd / 错误的弗洛伊德

综述

Codeforces 350 是一套有点老的 Div.2,难度为 \(1200-1500-1600-2400-2200\)(其实没那么高)。

C Bombs / 炸弹

题目描述

平面直角坐标系上有 \(n\) 颗炸弹,在 \((0,0)\) 有一个拆弹机器人,它可以执行以下操作,问拆除完毕所需的最小操作数和一组方案。

  • 上下左右移动若干步,不能越过炸弹
  • 拿起自己所在位置上的炸弹(如有)
  • 把自己正拿着的炸弹拆除(如有,且在 \((0,0)\) 位置)

\(n\le 10^5\)

解题思路

注意到,将炸弹按到原点的曼哈顿距离排序后依次拆除就是对的。

D Looking for Owls / 寻找猫头鹰

题目描述

给定 \(n\) 条线段和 \(m\) 个圆,定义一个“猫头鹰”是满足以下四个条件的一条线段和两个圆的集合。请找出图上不同“猫头鹰”的数量。

  • 两个圆半径相等
  • 两个圆没有交点
  • 两个圆关于线段对称
  • 两个圆圆心的连线和线段有交点

\(n\le 3\cdot 10^5\)\(m\le 1500\)

解题思路

先枚举两个圆,判掉前两个条件,将合法的连心线中点和中垂线存下来。接着,将线段按照所在直线分类,对于每一类考虑每条线覆盖了哪些连心线中点,这可以二维数点做。

E Wrong Floyd / 错误的弗洛伊德

题目描述

有一段错误的 Floyd 求全源最短路的代码,给定代码中 \(n,m,k,a[]\) 的取值,要求构造一组数据使得代码发生答案错误。

input(n,m,k,a[])
for w 1 -> k:
    let p = a[w]
	for u 1 -> n:
		for v 1 -> n:
			d[u][v] = min(d[u][v], d[u][p] + d[p][v])

解题思路

不难发现,上面这段代码会出错是因为它只更新经过 \(a[]\) 点的路径。因此,可以选两个点使其最段路为 \(2\),且路径中点不在 \(a\) 内。剩下的边随便连。

posted @ 2025-09-25 14:36  cwkapn  阅读(14)  评论(0)    收藏  举报