博客
关于我
AtCoder Beginner Contest 173 English C - H and V 二进制枚举
阅读量:146 次
发布时间:2019-02-28

本文共 1573 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要计算在给定的网格中选择某些行和列后,恰好剩下K个黑色格子的选择方式数目。我们可以通过枚举所有可能的行和列的组合来实现这一点。

方法思路

  • 问题分析:我们需要选择某些行和列,将这些行和列内的所有格子变为红色。剩下的黑色格子数目必须恰好是K个。我们可以通过枚举所有可能的行和列的组合来计算每种组合下剩下的黑色格子数目。

  • 预处理:首先,我们计算每一行和每一列的黑色格子数目,并记录每个格子的颜色。

  • 枚举组合:我们枚举所有可能的行和列的组合。对于每个组合,计算被染色的黑色格子数目,然后计算剩下的黑色格子数目。

  • 计算剩余:剩下的黑色格子数目等于总黑色格子数目减去被染色的黑色格子数目。如果等于K,则计数器加一。

  • 解决代码

    H, W, K = map(int, input().split())grid = []for _ in range(H):    line = input().strip()    grid.append(line)row_black = [0] * Hcol_black = [0] * Wfor i in range(H):    for j in range(W):        if grid[i][j] == '#':            row_black[i] += 1            col_black[j] += 1B = sum(row_black)ans = 0for mask_row in range(0, 1 << H):    R_black = 0    for r in range(H):        if (mask_row >> r) & 1:            R_black += row_black[r]    for mask_col in range(0, 1 << W):        C_black = 0        for c in range(W):            if (mask_col >> c) & 1:                C_black += col_black[c]        R_and_C_black = 0        for r in range(H):            if (mask_row >> r) & 1:                for c in range(W):                    if (mask_col >> c) & 1:                        if grid[r][c] == '#':                            R_and_C_black += 1        total_chromatic = R_black + C_black - R_and_C_black        remaining = B - total_chromatic        if remaining == K:            ans += 1print(ans)

    代码解释

  • 读取输入:读取网格的尺寸H、W和K,以及网格的每一行。
  • 预处理:计算每一行和每一列的黑色格子数目,并记录总的黑色格子数目B。
  • 枚举组合:使用位掩码枚举所有可能的行和列的组合。对于每个组合,计算选中的行和列的黑色格子数目。
  • 计算交点:计算选中行和选中列的交点中的黑色格子数目。
  • 剩余计算:计算被染色的黑色格子数目,并确定剩下的黑色格子数目是否等于K。如果是,计数器加一。
  • 输出结果:输出符合条件的选择方式数目。
  • 这种方法通过枚举所有可能的行和列组合,确保了计算的全面性和准确性,适用于较小的网格尺寸。

    转载地址:http://hdld.baihongyu.com/

    你可能感兴趣的文章
    python | huey,一个非常厉害的 任务调度 Python 库!
    查看>>
    python | hypothesis,一个有趣的 Python 库!
    查看>>
    python | Indico,一个超酷的 Python 库!
    查看>>
    python | isort,一个有趣的 自动整理导入语句 的Python 库!
    查看>>
    python | jinja,一个超酷的 Python 库!
    查看>>
    python | joblib,一个强大的 Python 库!
    查看>>
    python调用git bash_Python学习第70课-用Git Bash在命令行打开sublime
    查看>>
    python | jsonschema,一个实用的 验证 JSON 数据结构 Python 库!
    查看>>
    python课程的中期报告范文_课题研究中期总结报告范文
    查看>>
    python | lxml,一个超酷的 关于XML/HTML 文档 Python 库!
    查看>>
    python | mplfinance,一个有趣的金融数据可视化 Python 库!
    查看>>
    python | nipy,一个强大的关于 神经影像数据分析 的Python 库!
    查看>>
    python | NLTK,一个强大的 自然语言处理 Python 库!
    查看>>
    python | nupic,一个强大的 处理时间序列的Python 库!
    查看>>
    python | orange3,一个神奇的 Python 库!
    查看>>
    python | pdfminer,一个神奇的 关于PDF 文件的 Python 库!
    查看>>
    python | pendulum,一个有趣的 日期和时间 Python 库!
    查看>>
    python | pluginbase,一个神奇的 关于插件框架 的Python 库!
    查看>>
    python | ply,一个无敌的 词法和语法分析工具 的Python 库!
    查看>>
    python | py2exe,一个超酷的 Python 库!
    查看>>