AT_xmascon22_a.Arte Del Latte
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
通过最多 500 次“马布林(marbling)”操作,制作出如下图所示的接近目标的图像。只要满足后述达成条件,输出的图片可以是彩色的。

输入格式
输入按以下格式从标准输入给出。
W H N G0
⋮
GH−1
W,H 表示画布的宽度和高度,N 表示马布林操作次数的上限。实际输入中 H=W=N=500。
Gy(0≤y<H)为长度为 W 的字符串,表示目标图片中第 y 行各像素的颜色。若目标图片像素 (x,y) 处 Gy 的第 x 个字符为 #,则该像素为白色;为 . 时,则该像素为黑色。
输出格式
M
p1
⋮
pM
第 1 行输出一个整数 M(0≤M≤N),表示马布林操作的次数。
接下来的 M 行中,第 i(1≤i≤M)行输出第 i 次马布林操作,格式如下。
- 若执行
drop操作,则 pi 为drop x y d r g b的格式- 表示在点 (x,y) 处滴下颜色为 (r,g,b) 的颜料形成半径为 d 的圆。
- 输出需满足以下条件:
- 0≤x<W,0≤y<H
- 0≤r≤255,0≤g≤255,0≤b≤255
- 1≤d≤500
- 若执行
tine_line操作,则 pi 为tine_line x_1 y_1 x_2 y_2 z c的格式- 表示沿经过两点 A(x1,y1),B(x2,y2) 的直线,从 A 指向 B 的方向,在水面上用细棒划线;参数 z,c 分别指定颜料的移动量和移动范围。
- 输出需满足以下条件:
- 0≤x1<W,0≤y1<H,0≤x2<W,0≤y2<H
- A=B(x1=x2 或 y1=y2)
- 1≤z≤100
- 1≤c≤10
所有输出的数值必须为整数。
说明/提示
画布与马布林操作
用于绘制图像的画布大小为 500 像素 × 500 像素,像素位置用整数对 (x,y) 表示(0≤x<500,0≤y<500)。**注意,x 坐标从左到右增大,y 坐标从上到下增大。**每个像素有 3 个元素表示其颜色:R,G,B。画布初始时,所有像素的 R,G,B 值均为 0。
你可以对画布执行以下 2 种马布林操作:
-
drop:在像素 C(x,y) 处滴下颜色为 (r,g,b) 的颜料,形成半径为 d 的圆。- 此操作将点 P 的颜色移动为 C+1+∣P−C∣2d2(P−C)。
- 若 C 到 P 的距离小于等于 d,则该像素颜色变为 (r,g,b)。
-
tine_line:沿经过两点 A(x1,y1),B(x2,y2) 的直线,从 A 朝 B 的方向,用细棒划线;划线时颜料的移动量和作用范围由参数 z,c 指定。- 此操作将点 P 的颜色按 P+zudM 移动,其中 z,u,d,M 含义如下:
- 设 N 为与 AB 垂直的单位向量,d=∣(P−B)⋅N∣。
- M 为与 AB 同向的单位向量。
- 1≤z≤100,表示颜料移动量,是可设参数,z 越大,沿直线的色彩变化越显著。
- u=2−1/c(1≤c≤10),表示颜料影响范围,可设参数,c 越大,作用范围越大。
- 此操作将点 P 的颜色按 P+zudM 移动,其中 z,u,d,M 含义如下:
实际上,若点 P 经操作移动为 F(P),操作后像素 Q 的颜色将设置为操作前最接近 F−1(Q) 的像素的颜色。画布外颜色一律视为黑色,即 (R,G,B)=(0,0,0)。
两种马布林操作的点的移动还满足以下关系,可在构造操作时利用:
- 若 Q=C+1+∣P−C∣2d2(P−C),则 P=C+1−∣Q−C∣2d2(Q−C)
- 若 Q=P+zudM,则 P=Q−zud′M(其中 d′=∣(Q−B)⋅N∣)
达成条件
颜色 (R,G,B) 若满足 R+G+B≥255,称为明亮色,否则称为暗色。若目标图像中白色区域为明亮色、黑色区域为暗色,则认为生成的图片达成目标。
具体来说,若目标图像与输出图像在明暗不一致的像素数不超过 16000,则视为 AC。
这里,像素 (x,y) 的明暗不一致,指的是:目标图像在(x,y)为白色且输出图像为暗色,或目标图像为黑色且输出图像为明亮色。
数据与可视化工具
**所需输入数据可以在这里下载。**zip 中包括如下文件:
marbling/input.png:目标图像。图片尺寸 500×500 像素。marbling/input.txt:对应于目标图像的输入数据,实际评测使用时与此一致。
另外,可视化工具可进行操作序列可视化与达成条件判定。页面底部的“マーブリング操作を描画する”功能可读取正确格式的操作行(即按本题输出格式,首行会被跳过)。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?