博客
关于我
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 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>
    python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>