#thzx004. 伪影检测

伪影检测

题面:伪影检测

题目描述

在古早的 Windows 系统中,有一种屏幕保护程序,显示多个大小不一的球体在屏幕上碰撞反弹。如今,AI 生成视频有时会出现伪影(重影、分身),为了检测AI训练效果,我们让AI生成一种模拟了这种屏保效果的视频,通过检测其是否出现伪影来确认AI训练参数是否存在问题。 AI 生成的视频是否出现伪影(即多个球体重叠),我们需要进行一些检测。同时,我们会给正在训练的AI一些容忍度,当一些小范围的球出现违规,我们暂时容忍可以继续训练,只有当违规数量特别多时才会终止训练,查找问题。

简化模型:给定一个宽度为 L、高度为 W 的长方形屏幕,左下角坐标为 (0,0),内部有 n 个大小不一的圆(球体的投影)。如果存在以下两种违规情况之一,则认为出现了伪影,需要重新训练 AI 参数:

  1. 范围违规:有超过 k 个圆的任何部分超出了长方形范围(与边界相切不算超出)。
  2. 相交违规:在长方形范围内的圆中,存在至少 m 个圆属于同一个相交群体。

注意:只要满足以上两个条件中的任意一个,就判定为出现伪影。

具体来说,两个圆相交当且仅当两个圆的圆心距离小于两圆半径之和。注意,相切不算相交,这是为了模拟真实碰撞屏保中球体可以接触但不穿透的现象。

相交关系是传递的:如果圆 A 与圆 B 相交,圆 B 与圆 C 相交,那么圆 A 和圆 C 属于同一个群体,即使它们没有直接相交。

一个圆被认为是"在长方形范围内"的,当且仅当:

  • 圆心到长方形四条边的距离都大于等于半径
  • 即:x >= r 且 x <= L - r 且 y >= r 且 y <= W - r

输入格式

第一行一个整数 T,表示数据组数。

对于每组数据:

  • 第一行五个整数 L, W, n, m, k,分别表示长方形的长、宽、圆的数量和两个阈值。
  • 接下来 n 行,每行三个整数 x, y, r,表示圆心坐标和半径。

输出格式

对于每组数据,如果出现伪影(满足两个违规条件之一),输出 "YES",否则输出 "NO"

数据范围

  • 1 <= T <= 10
  • 对于 30% 的数据,n <= 100
  • 对于 100% 的数据,n <= 2500,0 <= L, W <= 10^18,0 <= x, y <= 10^9,1 <= r <= 10^9,1 <= m <= n,0 <= k <= n

样例输入

3
100 100 5 3 1
10 20 5
30 40 8
60 70 6
80 90 7
45 55 4
50 60 5 2 0
5 5 10
15 5 10
25 5 10
35 5 10
45 5 10
50 50 8 4 1
5 5 10
45 5 10
5 45 10
45 45 10
25 25 5
30 30 4
15 15 3
20 20 2

样例输出

NO
YES
YES

样例解释

解释:

第一组:所有圆不相交,都在内部 → NO

第二组:5个圆半径都很大(10),相邻圆心距离为10,半径和为20,圆心距离10 < 20,所以相交,且都在内部,形成群体大小为5 ≥ m=2 → YES

第三组:超边界违规的圆超过了 k=1 个 → YES