- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
USACO 2017 美国公开赛铜牌问题 3 现代艺术 Problem Link
# Read in grid as 2D array
with open("art.in", 'r') as fin:
n = int(fin.readline().strip())
grid = [[int(i) for i in fin.readline().strip()] for _ in range(n)]
print(grid)
# Get all possible colors, which is everything visible excluding zero
possible = set()
for row in grid:
for p in row:
possible.add(p)
if 0 in possible:
possible.remove(0)
print(possible)
# Recursive search function that gets the maximum x of the triangle and maximum y of the triangle, which will be used further down the road to calculate whether or not it is a valid rectangle
def search(grid, i, j, v):
global max_x, max_y, searched, area
if i < 0 or i >= n or j < 0 or j >= n or grid[i][j] != v or (i, j) in searched:
max_x = max(max_x, j)
max_y = max(max_y, i)
return
searched.append((i, j))
area += 1
search(grid, i+1, j, v)
search(grid, i-1, j, v)
search(grid, i, j+1, v)
search(grid, i, j-1, v)
# Use the search, and check if there is a possibility of the rectangle being covered. It it is covered, eliminate the rectangle that covers it from the list of possibilities.
searched = []
for i, row in enumerate(grid):
for j, p in enumerate(row):
if (i, j) in searched or not p:
continue
max_x = 0
max_y = 0
# The area variable is uneeded. Using it for debugging
area = 0
search(grid, i, j, p)
print(area, (max_x-j) * (max_y-i))
print()
for k in range(i, max_y):
for l in range(j, max_x):
if grid[k][l] != p and grid[k][l] in possible:
possible.remove(grid[k][l])
# Write the answer to the output file
with open('art.out', 'w') as fout:
fout.write(str(len(possible)))
我的逻辑从代码中非常清晰,我可以从 10 个测试用例中得到 6 个,但是当我尝试这样的输入时:
4
1234
1234
1234
1334
我的程序输出 4 而不是 3,这是正确答案。这就是我的问题。我不知道为什么是 3 而不是 4
这个问题我看了好几遍,还是没明白。
如果有人能帮忙解释一下,那就太好了。
最佳答案
我认为这个问题的一个重要部分是识别输入中的“破损”矩形(即有重叠的矩形)。对于上一个示例,1
、2
和 4
是“完整”矩形,因为它们没有明确重叠任何其他瓷砖。但是,3
显然与 2
重叠,因此,2
或 3
先存在,而不是同时存在。因此,有两个完整的加上一组不完整的,最终结果为3
。以下是此问题的可能解决方案的代码:
from collections import defaultdict
def w_h(points):
d = {'w':set(), 'h':set()}
for a, b in points:
d['h'].add(a)
d['w'].add(b)
return [max(b) - min(b) + 1 for b in d.values()]
def original_paintings(p):
d = defaultdict(list)
for x, a in enumerate(p):
for y, s in enumerate(a):
if s:
d[s].append((x, y))
r = {a:(wh:=w_h(b))[0]*wh[1] - len(b) for a, b in d.items()}
return len(r) - len(set(r.values())) + 1
t1 = [[2, 2, 3, 0], [2, 7, 3, 7], [2, 7, 7, 7], [0, 0, 0, 0]]
t2 = [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 3, 3, 4]]
print(original_paintings(t1))
print(original_paintings(t2))
输出:
1
3
关于python - 现代艺术中的 CP Python 逻辑混淆(Bronze USACO 2017 美国公开赛第 3 页),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70051305/
问题如下 考虑下面显示的数字三角形。编写一个程序,计算从顶部开始到底部某处结束的路线上可以传递的最大数字总和。每一步都可以向左斜向下或向右斜向下。 7 3 8
我正在 USACO 计算机奥林匹克竞赛中尝试代码,但遇到了第一个问题。如果我提交以下代码,则会收到以下错误: Run 1: Execution error: Your program exited w
我正在使用eclipse来编写程序。当我尝试提交程序时,USACO 给我一个文件丢失的信息: 示例输入案例超出运行时错误或内存限制 - 详细信息如下您的输出文件 reorder.out:[文件丢失!]
我在解决 USACO 培训页面上的第一个问题时遇到了麻烦。 任务是从 text.in 文件中请求两个字符串,将字符串转换为字母乘积的数字(其中 a=1、b=2、z=26),然后查看余数是否的数字/47
section2.2中的“子集和”问题要求你计算从1到n的整数集合有多少种方式可以分成两个和相同的集合。 我知道重现是: f[i][j] : numbers of ways that sum up t
我是编码新手,我正在尝试为 USACO 发布的“十三号星期五”问题编写代码,该问题要求我们计算每月 13 日出现在星期日、星期一、星期二、星期三的频率,指定 N 年期间的星期四、星期五和星期六。测试的
我正在为 USACO 编写代码,但文件的读写不起作用。我正在尝试读取第一个文件行并将其存储为整数。后续行将被读取并存储到数组中以执行计算。我认为这个问题与 fopen 有关。我总是收到中止窗口,上面写
问题如下 考虑下面显示的数字三角形。编写一个程序,计算从顶部开始到底部某处结束的路线上可以传递的最大数字总和。每一步都可以向左斜向下或向右斜向下。 7 3 8 8 1
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我是计算机科学专业的一年级学生,目前正在参加一些算法竞赛。我编写的以下代码存在一个缺陷,我不确定如何修复 这是问题说明: http://www.usaco.org/index.php?page=vie
我刚刚开始使用 Java 解决一些 USACO 实践问题。然而,我立即遇到了一些关于解析文件输入的困惑...... USACO 培训页面说: Important: BufferedReader and
我遇到了 Usaco 训练门的挤奶时间问题(又名 milk2)。我的代码适用于前几个问题,但随后不适用于其中一种情况。 问题在这里:http://jeremiahflaga.blogspot.com/
我遇到了 USACO 培训页面上的第一个问题。 任务是从 text.in 文件中请求两个字符串,将字符串转换为字母乘积的数字(其中 a=1、b=2、z=26),然后查看如果数字/47 的余数彼此相等(
This是我正在研究的问题 我没有收到任何编译时错误、运行时错误,而且我的大部分代码似乎都可以正常工作。调试后,我发现 left() 和 right() 中的 while 循环导致了问题。我很难弄清楚
我一直在看一些USACO黄金级别的算法问题,我需要有人帮我解释一下这个问题的解决方案。 Here是问题所在,解决方案如下: Usually the first step in solving incr
我对 C++ 还很陌生,去年一直在尝试 USACO 问题。这是我下面的代码,它可以工作,但是花了几个小时来摆弄格式。事实证明我需要 bool sorting(total a, total b) {re
我收到一条错误消息,提示我的文件作为标准问题丢失。我已经关闭了刷新 FileReader 的文件,使问题变得更加模糊。我尝试使用 BufferedWriter、FileOutputStream 和 D
我正在处理 USACO 培训页面的第一个问题,它要求您提交一个简单的解决方案。虽然我的代码可以在 IDE 上编译,但 USACO 评分器给我一个错误,说找不到 main。 Run 1: Executi
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
2018 年 12 月的 USACO 铜牌问题,BackForth 问题:http://usaco.org/index.php?page=viewproblem2&cpid=857 我的代码: imp
我是一名优秀的程序员,十分优秀!