EOJ Monthly 2018.8 A. A Simple Convolution(模拟)

题目链接:https://acm.ecnu.edu.cn/contest/103/problem/A/

      题目就是让求卷积,至于什么是卷积:传送门,这道题就是简单的求一个卷积,给一个矩阵A,再给一个矩阵B,然后矩阵A和矩阵B对应元素相乘后将所有结果相加,就能求得一个数,以此类推输出所有的求得的数(题目上给的例图很形象)。我的代码可能过于暴力...


AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,p,q;
int pre[105][105],a[105][105],b[105][105];

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	scanf("%d%d",&p,&q);
	for(int i=1;i<=p;i++){
		for(int j=1;j<=q;j++){
			scanf("%d",&b[i][j]);
		}
	}
	for(int i=1;i<=n-p+1;i++){
		for(int j=1;j<=m-q+1;j++){
			int ans = 0;
			int num1 = 1,num2 = 1;
			for(int k=i;k<=i+p;k++){
				for(int l=j;l<=j+q;l++){
					ans += (a[k][l] * b[num1][num2++]);
				}
				num1++;
				num2 = 1;
			}
			printf("%d%c",ans,j==m-q+1?'\n':' ');
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Charles_Zaqdt/article/details/81605276