[PYTHON与CSP的姻缘]202212-3 JPEG 解码

题目

题干较长,请自行查看2022年12月的T3

思路

这个题没多少大的数据结构算法,读懂题目翻译就行
其中有几个注意点,一不小心100就变40了

  • 注意点:
    1. 读题读题读题,读题很重要, 问题描述中的第六条有两条范围限制,一不小心漏一个就变40了
    2. python直接用int是取整(小数位全舍了),可以用int(x+0.5)手动达到四舍五入的效果(这个要是忘了也就变40了哇哇哇)
    3. 还有列表的格式化输出要注意一下,用“*”只是拆包,双层列表的话产生的是里面一个个的列表(也就是说这个时候是好几个数据,不能再用一次“*“,即不能用”**"打印双层列表!
    4. 还要注意的是T=2输出最终解码结果时,要创建新数组(不要偷懒用原数组赋值,因为公式里面还要用!emmm……这就是不好好看题看一半就开始写的后果……)

代码

写的时候说试试不找他M赋值时的变换规律直接全部64的坐标输入进去看看行不行,结果还真过了哈哈😄
下次再找找它的规律试试

import math
Q = [0]*8
for i in range(8):
    Q[i] = list(map(int,input().split()))
n = int(input())  # 扫描数据的个数
T = int(input())  # 要进行的任务
data = list(map(int,input().split()))
M = [[0]*8 for i in range(8)]

lst = [(0,0),(0,1),(1,0),(2,0),(1,1),(0,2),(0,3),(1,2),(2,1),(3,0),(4,0),(3,1),(2,2),(1,3),(0,4),(0,5),(1,4),(2,3),(3,2),(4,1),(5,0),(6,0),(5,1),(4,2),(3,3),(2,4),(1,5),(0,6),(0,7),(1,6),(2,5),(3,4),(4,3),(5,2),(6,1),(7,0),(7,1),(6,2),(5,3),(4,4),(3,5),(2,6),(1,7),(2,7),(3,6),(4,5),(5,4),(6,3),(7,2),(7,3),(6,4),(5,5),(4,6),(3,7),(4,7),(5,6),(6,5),(7,4),(7,5),(6,6),(5,7),(6,7),(7,6),(7,7)]

if T == 0:
    for i in range(len(data)):
        M[lst[i][0]][lst[i][1]] = data[i]
    for i in range(8):
        print(*M[i])

else:
    for i in range(len(data)):
        M[lst[i][0]][lst[i][1]] = data[i]*Q[lst[i][0]][lst[i][1]]
    if  T == 1:
        for i in range(8):
            print(*M[i])
        exit(0)
    elif T==2:
        MM = [[0]*8 for i in range(8)]
        for i,j in lst:
            SU = 0
            for u in range(8):
                sumv=0
                au = pow(1/2,1/2) if u==0 else 1
                for v in range(8):
                    av = pow(1/2,1/2) if v==0 else 1
                    sumv +=au*av*M[u][v]*math.cos(math.pi/8*(i+0.5)*u)*math.cos(math.pi*v*(j+1/2)/8)
                SU += sumv
            MM[i][j] = int(SU/4+128+0.5)
            if MM[i][j] > 255:
                MM[i][j] = 255
            elif MM[i][j] < 0:
                MM[i][j] = 0
        # print(*MM)
        for i in range(8):
            print(*MM[i])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值