当前位置: 首页 > news >正文

洛谷题单入门4-P5729 【深基5.例7】工艺品制作-python

输入格式

第一行三个正整数 w,x,h。

第二行一个正整数 q。

接下来 q 行,每行六个整数

输出格式

输出一个整数表示答案。

三维数组直接标记
class Solution:
    @staticmethod
    def oi_input():
        """从标准输入读取数据"""
        w, x, h = map(int, input().split())
        q = int(input())
        intervals = []
        for _ in range(q):
            intervals.append(list(map(int, input().split())))
        return w, x, h, intervals

    @staticmethod
    def oi_test():
        """提供测试数据"""
        return (4, 4, 4, [[1, 1, 1, 2, 2, 2]])

    @staticmethod
    def solution(w, x, h, intervals):
        # 初始化三维数组,所有位置初始为1
        cube = [[[1 for _ in range(h + 1)] for _ in range(x + 1)] for __ in range(w + 1)]

        # 处理每次切割
        for interval in intervals:
            x1, y1, z1, x2, y2, z2 = interval
            for i in range(x1, x2 + 1):
                for j in range(y1, y2 + 1):
                    for k in range(z1, z2 + 1):
                        cube[i][j][k] = 0

        # 统计剩余的小方块数目
        count = 0
        for i in range(1, w + 1):
            for j in range(1, x + 1):
                for k in range(1, h + 1):
                    count += cube[i][j][k]
        return count


oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution

if __name__ == '__main__':
    w, x, h, intervals = oi_test()
    # w, x, h, intervals = oi_input()
    print(solution(w, x, h, intervals))

三维差分数组

class Solution:
    @staticmethod
    def oi_input():
        """从标准输入读取数据"""
        w, x, h = map(int, input().split())
        q = int(input())
        intervals = []
        for _ in range(q):
            intervals.append(list(map(int, input().split())))
        return w, x, h, intervals

    @staticmethod
    def oi_test():
        """提供测试数据"""
        return (4, 4, 4, [[1, 1, 1, 2, 2, 2]])


    @staticmethod
    def solution(w, x, h, intervals):
        diff = [[[0] * (h + 2) for _ in range(x + 2)] for __ in range(w + 2)]

        for x1, y1, z1, x2, y2, z2 in intervals:
            diff[x1][y1][z1] += 1
            diff[x1][y1][z2 + 1] -= 1
            diff[x1][y2 + 1][z1] -= 1
            diff[x1][y2 + 1][z2 + 1] += 1
            diff[x2 + 1][y1][z1] -= 1
            diff[x2 + 1][y1][z2 + 1] += 1
            diff[x2 + 1][y2 + 1][z1] += 1
            diff[x2 + 1][y2 + 1][z2 + 1] -= 1

        # Calculate prefix sums
        for j in range(1, x + 1):
            for k in range(1, h + 1):
                for i in range(1, w + 1):
                    diff[i][j][k] += diff[i - 1][j][k]

        for i in range(1, w + 1):
            for k in range(1, h + 1):
                for j in range(1, x + 1):
                    diff[i][j][k] += diff[i][j - 1][k]

        for i in range(1, w + 1):
            for j in range(1, x + 1):
                for k in range(1, h + 1):
                    diff[i][j][k] += diff[i][j][k - 1]

        count = 0
        for i in range(1, w + 1):
            for j in range(1, x + 1):
                for k in range(1, h + 1):
                    if diff[i][j][k] == 0:
                        count += 1
        return count


oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution

if __name__ == '__main__':
    w, x, h, intervals = oi_test()
    # w, x, h, intervals = oi_input()
    print(solution(w, x, h, intervals))

相关文章:

  • 一文了解Gradle 依赖管理(五)- 依赖管理缓存依赖
  • K8S学习之基础四十五:k8s中部署elasticsearch
  • Spec2MP:项目管理之项目质量管理
  • oracle数据库(数据库启动关闭/sqlplus登录及基本操作/设置字符集/distinct去重)
  • 光流 | 基于光流的人体异常行为检测算法原理,公式,算法改进,matlab代码
  • 大模型应用(Java)2025/3/24
  • 运维面试题(八)
  • 《Python实战进阶》第31集:特征工程:特征选择与降维技术
  • PROE 与 STL 格式转换:开启 3D 打印及多元应用的大门
  • 【机器学习】什么是决策树?
  • FastStoneCapture免费版下载安装使用教程(附安装包)
  • 从零开始理解基于深度学习的语义分割模型:RCA与RCM模块的实现
  • 【项目合集】设备防丢失监控系统
  • C++List模拟实现|细节|难点|易错点|全面解析|类型转换|
  • 多粒度视频对象分割 前景修复 烟雾跟踪
  • 华为OD机试2025A卷 - 游戏分组/王者荣耀(Java Python JS C++ C )
  • 2025高频面试算法总结篇【字符串】
  • LCR 187. 破冰游戏(python3解法)
  • 坦克大战(c++)
  • 第二章 EXI协议原理与实现--9.5 cjson库介绍
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • “无锡景・江南韵”:中国评弹艺术在尼日利亚收获众多粉丝
  • “不为一时一事所惑,不为风高浪急所扰”——习近平主席对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典纪实
  • 著名学者黄修己去世,享年90岁
  • 首映丨纪录电影《滚烫年华》:献给所有奋斗者
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元