博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现alternative list arrange备选列表排列算法(附完整源码)
    查看>>
    Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
    查看>>
    Objective-C实现anagrams字谜算法(附完整源码)
    查看>>
    Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
    查看>>
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现argmax函数功能(附完整源码)
    查看>>
    Objective-C实现arithmetic算术算法(附完整源码)
    查看>>
    Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
    查看>>
    Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
    查看>>
    Objective-C实现average mean平均数算法(附完整源码)
    查看>>
    Objective-C实现average median平均中位数算法(附完整源码)
    查看>>
    Objective-C实现average mode平均模式算法(附完整源码)
    查看>>
    Objective-C实现avl 树算法(附完整源码)
    查看>>
    Objective-C实现AvlTree树算法(附完整源码)
    查看>>
    Objective-C实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
    查看>>
    Objective-C实现BACKTRACKING 方法查找集合的幂集算法(附完整源码)
    查看>>
    Objective-C实现bailey borwein plouffe算法(附完整源码)
    查看>>
    Objective-C实现balanced parentheses平衡括号表达式算法(附完整源码)
    查看>>