AT_xmascon20_a Additive-Subtractive Stamps

题目描述

使用最多 $20,000$ 次给定的印章,创作一个符合以下区域地图要求的图像。**只要符合后述的达成条件,可以将图像制作得更加丰富多彩。** ![区域地图](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_xmascon20_a/f813e1fdb363a3d00ea08b96c60b6b1c30ea4c95.png) ### 输入格式 本题不需要输入。 ### 输出格式 第一行输出一个整数 $ p $,表示印章操作的次数,满足 $ 0 \le p \le 20,000 $。 接下来的 $ p $ 行,每行包含 $ 4 $ 个用空格分隔的整数 $ k_i,\ x_i,\ y_i,\ t_i $,代表第 $ i $ 次印章操作的信息:在位置 $ (x_i,\ y_i) $ 使用 ID 为 $ k_i $ 的印章。$ t_i = 1 $ 表示盖章操作,$ t_i = -1 $ 表示撤销操作。 印章必须在至少能覆盖一个像素的有效位置使用,即对于印章 $ k_i $,其大小为 $ s $,要求 $ -s < x_i < 800 $ 且 $ -s < y_i < 400 $。 ### 数据范围与提示 #### 画布和印章 制作图像的画布宽 $800$ 像素,高 $400$ 像素。像素位置由整数对 $ (x, y) $ 表示,满足 $ 0 \le x < 800 $,$ 0 \le y < 400 $。**注意,$ x $ 坐标从左到右递增,$ y $ 坐标从上到下递增。**每个像素拥有 $ R, G, B $ 三个颜色值,初始时全为 $ 0 $。 印章用大小 $ s $ 和颜色信息 $ (r, g, b) $ 表示。一次印章操作可以在画布的指定位置盖上或移除印章。 具体来说,如果印章 $ (s, r, g, b) $ 被盖在或移除自位置 $ (x_i, y_i) $,那么满足 $ x_i \le x < x_i + s $ 且 $ y_i \le y < y_i + s $ 的所有像素 $ (x, y) $ 的 $ R, G, B $ 值分别增加或减少 $ r, g, b $。如果某像素的值超过 $ 255 $,则变为 $ 255 $;若低于 $ 0 $,则变为 $ 0 $。 #### 达成条件 在区域地图中,由相同颜色的四方向连通的像素组成的部分称作“区域”。图像要被视为“符合区域地图”,必须满足以下条件: - **区域内条件**:每个区域内,所有像素的 $ R $ 值方差不大于 $ 700 $,$ G $ 和 $ B $ 同样如此。 - **相邻区域条件**:将某一区域的“平均色”定义为该区域内所有像素的 $ R, G, B $ 的平均值。对于相邻的两个区域,若它们的平均色分别为 $ (R_1, G_1, B_1) $ 和 $ (R_2, G_2, B_2) $,则需满足 $ (R_1 - R_2)^2 + (G_1 - G_2)^2 + (B_1 - B_2)^2 \ge 80^2 $。 #### 数据 **解题所需的数据已打包成 zip 文件,可以从[这里](https://img.atcoder.jp/xmascon20/04fbe0718c44e1333ca058e2a8309f0f.zip)下载。**zip 包含以下文件: - `stamps/map.png`:表示区域地图的图像文件,尺寸为宽 $800$ 像素,高 $400$ 像素。 - `stamps/map.txt`:与区域地图对应的文本文件,给每个像素分配了区域 ID。 - 包括 $400$ 行,每行有 $800$ 个整数。 - `stamps/stampset.txt`:可用印章列表的文本文件。 - 第一行为印章种类数 $ K $。 - 接下来的 $ K $ 行是印章的信息,每行由五个整数 $ k, s, r, g, b $ 组成,表示 ID 为 $ k $ 的印章特征为 $ (s, r, g, b) $。印章按 ID 升序排列。 - `stamps/play.html`:**可视化工具和手动操作工具**,可以用于操作可视化和达成条件检测,提交前建议使用。 - 下方有“加载印章操作”功能,会读取所有合法的印章操作行(因此,符合输出格式的输入时,第一行会被忽略)。 - `stamps/play.js`:可视化工具的源代码。 #### 限制条件 上述数据文件中,包括以下重要信息: - 图像尺寸是宽 $800$ 像素和高 $400$ 像素。 - 区域个数为 $30$,区域 ID 为 $0$ 至 $29$。 - 相同区域 ID 的像素设置是四方向连通的。 - 印章种类数为 $18$,印章 ID 为 $0$ 至 $17$。 - 每个印章的参数满足以下条件: - $7 \le s \le 50$。 - $0 \le r \le 40$。 - $0 \le g \le 40$。 - $0 \le b \le 40$。 此示例为符合上述格式要求的输出示例(但此输出不满足达成条件,会得到 `WA`)。 **本翻译由 AI 自动生成**

输入格式

この問題では入力は与えられない.

输出格式

> $ p $ $ k_1 $ $ x_1 $ $ y_1 $ $ t_1 $ $ \vdots $ $ k_p $ $ x_p $ $ y_p $ $ t_p $ $ 1 $ 行目に,スタンプ操作の回数を表す整数 $ p $ ($ 0\ \le\ p\ \le\ 20\,000 $) を出力せよ. 続く $ p $ 行のうち $ i $ ($ 1\ \le\ i\ \le\ p $) 行目には,$ i $ 回目のスタンプ操作を表す $ 4 $ つの整数 $ k_i,\ x_i,\ y_i,\ t_i $ を空白区切りで出力せよ.これは,$ i $ 回目の操作では位置 $ (x_i,\ y_i) $ に ID $ k_i $ のスタンプを使うことを表す.$ t_i\ =\ 1 $ の場合はスタンプを押す操作,$ t_i\ =\ -1 $ の場合はスタンプを引く操作を表す. スタンプは少なくとも $ 1 $ 個の画素を覆う位置で使わなければならない.すなわち,ID $ k_i $ のスタンプの大きさが $ s $ のとき,$ -s\

说明/提示

### キャンバスとスタンプ 画像を作るためのキャンバスは横 $ 800 $ px,縦 $ 400 $ px であり,画素の位置は整数の組 $ (x,\ y) $ ($ 0\ \le\ x\