题目3 : 图像算子

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

在图像处理的技术中,经常会用到算子与图像进行卷积运算,从而达到平滑图像或是查找边界的效果。

假设原图为H × W的矩阵A,算子矩阵为D × D的矩阵Op,则处理后的矩阵B大小为(H-D+1) × (W-D+1)。其中:

B[i][j] = ∑(A[i-1+dx][j-1+dy]*Op[dx][dy]) | (dx = 1 .. D, dy = 1 .. D), 1 ≤ i ≤ H-D+1, 1 ≤ j ≤ W-D+1

给定矩阵A和B,以及算子矩阵的边长D。你能求出算子矩阵中每个元素的值吗?

输入

第1行:3个整数,H, W, D,分别表示原图的高度和宽度,以及算子矩阵的大小。5≤H,W≤60,1≤D≤5,D一定是奇数。

第2..H+1行:每行W个整数,第i+1行第j列表示A[i][j],0≤A[i][j]≤255

接下来H-D+1行:每行W-D+1个整数,表示B[i][j],B[i][j]在int范围内,可能为负数。

输入保证有唯一解,并且解矩阵的每个元素都是整数。

输出

第1..D行:每行D个整数,第i行第j列表示Op[i][j]。

样例输入
5 5 3
1 6 13 10 3
13 1 5 6 15
8 2 15 0 12
19 19 17 18 18
9 18 19 5 17
22 15 6
35 -36 51
-20 3 -32
样例输出
0 1 0
1 -4 1
0 1 0

高斯消元解齐次线性方程组。A * OP = B  ,这里OP矩阵为未知矩阵。作为一个卷积算子矩阵,它完成的功能是以自身矩阵(d * d)在A上扫描并运算。比如在A上的第一个位置(1,1)上,

1 6 13               x1 x2 x3

13 1 5   mul直接对应位置元素相乘      x4 x5 x6      =    B[1]][1]= 22。  移动d * d次刚好 d * d个方程组,求解d*d个未知数。

8 2 15                                          x7 x8 x9

                                                                                    

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define PII pair<int, int>
#define INF 0x3f3f3f3f
#define eps 1e-9
using namespace std ; const int Maxn = ; int h, w, d;
int a[Maxn][Maxn], b[Maxn][Maxn];
//Mat:系数矩阵 V:解向量
double Mat[Maxn][Maxn], V[Maxn];
//Gauss消元:n是行列式个数,m是未知变量个数
void Gauss(int n, int m)
{
int k = , i , j;
for(j = ; j < m; j ++){
for(i = k; i < n; i ++){
if(fabs(Mat[i][j]) > eps)
break;
}
if(i == n) continue;
for(int p = ; p < m; p ++){
swap(Mat[i][p], Mat[k][p]);
}swap(V[i], V[k]);
double tmp = Mat[k][j];
for(int p = j; p < m; p ++)
Mat[k][p]/=tmp;
V[k]/=tmp;
for(int p = ; p < n; p ++){
if(p != k && (fabs(Mat[p][j]) > eps)){
tmp = Mat[p][j];
for(int q = ; q < m; q ++)
Mat[p][q] -= tmp * Mat[k][q];
V[p] -= tmp*V[k];
}
}
k ++;
}
} int main()
{
scanf("%d%d%d",&h,&w,&d);
for(int i = ; i < h; i ++){
for(int j = ; j < w; j ++){
scanf("%d",&a[i][j]);
}
}for(int i = ; i < h - d + ; i ++ ){
for(int j = ; j < w - d + ; j ++){
scanf("%d",&b[i][j]);
}
}
int r = ;
for(int i = ; i < h - d + ; i ++){
for(int j = ; j < w - d + ; j ++){
for(int p = ; p < d; p ++){
for(int q = ; q < d; q ++){
Mat[r][p*d + q] = a[i + p][j + q];
}
}
V[r] = b[i][j];
r ++;
}
}
Gauss(r, d*d);
for(int i = ; i < d*d; i ++){
if(V[i] > -1e-) printf("%.0f",V[i] + 1e-);
else printf("%0.f",V[i] - 1e-);
if(i % d == d - ) printf("\n");
else printf(" ");
}
return ;
}

高斯消元_HihoCoderOffer6_03的更多相关文章

  1. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  2. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  3. *POJ 1222 高斯消元

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9612   Accepted: 62 ...

  4. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

  5. hihoCoder 1196 高斯消元·二

    Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...

  6. BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基

    [题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...

  7. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    [题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...

  8. UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  9. [高斯消元] POJ 2345 Central heating

    Central heating Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 614   Accepted: 286 Des ...

随机推荐

  1. 洛谷 1328 生活大爆炸版石头剪刀布(NOIp2014提高组)

    [题解] 简单粗暴的模拟题. #include<cstdio> #include<algorithm> #include<cstring> #define LL l ...

  2. 【09】AngularJS 表格

    AngularJS 表格 ng-repeat 指令可以完美的显示表格. 在表格中显示数据 使用 angular 显示表格是非常简单的: <div ng-app="myApp" ...

  3. 【Codeforces 484A】Bits

    [链接] 我是链接,点我呀:) [题意] 让你求出l~r当中二进制表示1的个数最多的数x [题解] 最多有64位 我们可以从l开始一直增大到r 怎么增大? 找到l的二进制表示当中0所在的位置 假设i这 ...

  4. Spring MVC学习总结(8)——Swagger入门详解

    前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...

  5. HDU 3784 继续xxx定律 & HDU 2578 Dating with girls(1)

    HDU 3784 继续xxx定律 HDU 2578 Dating with girls(1) 做3748之前要先做xxx定律  对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ ...

  6. Leetcode 80.删除重复数组的重复项

    删除重复数组的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...

  7. Spark在Executor上的内存分配

    spark.serializer (default org.apache.spark.serializer.JavaSerializer )    建议设置为 org.apache.spark.ser ...

  8. [luoguP1069] 细胞分裂(数论)

    传送门 分解质因数,不说了 这题坑了我2个多小时 教训 不熟悉位运算的优先级一定要加括号!!!! #include <cstdio> #include <iostream> # ...

  9. hdu 1527威佐夫博弈

    //http://www.cnblogs.com/bo-tao/archive/2012/04/16/2452633.html #include<stdio.h> #include< ...

  10. [codevs 1482]路线统计(矩阵乘法)

    题目:http://codevs.cn/problem/1482/ 分析:很像“经过K条边的最短路径条数”.但有所不同,那就是不是边数固定,而是路径总长度固定.看似不能用矩阵乘法了……但注意到每条边的 ...