#1833. AT_abc386_d-Diagonal Separation

AT_abc386_d-Diagonal Separation

好的,我来为你生成该题目的测试数据。

数据生成思路:

该题主要考察对于行列黑白分界点的判断。因此,生成数据时,需要重点考虑如何构造出 "Yes" 和 "No" 两种情况。

  • "Yes" 情况: 可以构造较为规则的数据,例如先确定某一个行/列的分界点,然后围绕该分界点生成数据。
  • "No" 情况: 可以构造冲突数据,例如在某一行中,强制左侧为白色,右侧为黑色。或者构造行列之间的矛盾。

生成策略:

  1. N 和 M 的范围: 题目已给出。
  2. 数据点数量: 生成 10 组数据。
  3. 数据类型: 按照题目要求,都是整数和字符。
  4. 数据合法性: 保证 Xi,YiX_i, Y_i[1,N][1, N] 范围内,且 (Xi,Yi)(X_i, Y_i) 唯一。

生成代码:

from cyaron import *
import random

for i in range(1, 11):
    io = IO(file_prefix='./data/data', data_id=i)

    N = randint(1, 100) if i <= 3 else randint(1000, 2000) if i <= 6 else randint(10**5, 10**5 + 1000) if i <= 9 else 10**9
    M = randint(1, min(N * N, 2 * 10**5))

    io.input_writeln(N, M)

    occupied = set()
    for _ in range(M):
        X = randint(1, N)
        Y = randint(1, N)
        while (X, Y) in occupied:
            X = randint(1, N)
            Y = randint(1, N)
        occupied.add((X, Y))

        C = choice(['B', 'W'])
        io.input_writeln(X, Y, C)

    io.output_gen("std.exe") # 生成输出文件