列表

详情


NC249948. 小d和图片压缩

描述

d和她对象小红去海洋馆玩了,但是由于小d拍照技术不好,他对象说把她拍的像嘎子!

d看了看,发现是小红最近长痘痘了,于是他为了讨小红开心,让痘痘看不见,自学了图像压缩这个技术。毕竟这个比磨皮和修图要好学多了。

这个技术是什么样子的呢?就是将相邻的四个像素点的数值求和取平均数。

因为他是速成的,因此他只能把图像缩小为原来的四分之一。

请你帮助他完成图像压缩吧!这对他很重要。

输入描述

第一行两个整数n,m,1 \leq n,m \leq 10^3,代表这个图像的长度和宽度,题目保证均为偶数。

接下来n行,每行m个整数,第i行第j列的数值a_{i,j},0 \leq a_{i,j} \leq 255代表这个像素点代表的灰度值。不能整除也没有关系,向下取整就行了。

输出描述

输出\frac{n}{2}\frac{m}{2}列,代表压缩完以后的图像,每一行两个数之间用一个空格隔开。

示例1

输入:

4 2
1 5
3 3
6 6
6 6

输出:

3
6

说明:


样例中,我们将上面四个像素合并,求和取平均值结果是3,下面四个像素求和取平均值结果是6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 297ms, 内存消耗: 5244K, 提交时间: 2023-04-11 19:36:37

#include<bits/stdc++.h>
using namespace std;
int m,n,a[1001][1001];
int main()
{	
	cin>>n>>m;
	int i,j;
	for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		cin>>a[i][j];
	for(i=1;i<=n;i+=2)
	{
	for(j=1;j<=m;j+=2)
	{
		cout<<(a[i][j]+a[i+1][j]+a[i][j+1]+a[i+1][j+1])/4<<" ";
	}
	cout<<endl;
	}
}

pypy3 解法, 执行用时: 599ms, 内存消耗: 70884K, 提交时间: 2023-04-07 19:02:40

n,m = map(int,input().split())
a = [list(map(int,input().split())) for _ in range(n)]
res = []
for i in range(0,n,2):
    lin = []
    for j in range(0,m,2):
        lin.append((a[i][j]+a[i+1][j]+a[i][j+1]+a[i+1][j+1])//4)
    res.append(lin)
for i in res:
    print(*i)

Python3 解法, 执行用时: 1424ms, 内存消耗: 5820K, 提交时间: 2023-04-07 19:06:38

n,m = map(int,input().split())
for i in range(0,n,2):
    l1 = list(map(int,input().split()))
    l2 = list(map(int,input().split()))
    for j in range(0,m,2):
        print((l1[j]+l1[j+1]+l2[j]+l2[j+1])//4,end=' ')
    print()

上一题