题目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. stall and flow separation on airfoil or blade

    stall stall and flow separation Table of Contents 1. Stall and flow separation 1.1. Separation of Bo ...

  2. java 使用OpenOffice文件实现预览

    1.安装OpenOffice软件 安装教程:https://jingyan.baidu.com/article/c275f6ba12c07ce33d756732.html 2.安装完成后,创建项目,p ...

  3. [bzoj1356]Rectangle[Baltic2009][几何常识乱搞]

    虽然说是几何常识乱搞,但是想不到啊.. 题意:n个点取4个组成矩形,使面积最大,求面积. n<=1500 题解: 1.对角线相等且相互交于中点的四边形是矩形. 2.矩形四点共圆. 所以$n^2$ ...

  4. 轰炸III

    题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...

  5. codevs1226 倒水问题

    题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...

  6. ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-18位)

    /* 假设某一17位数字是 17位数字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 计算17位 ...

  7. hello2 source analisis(notes)

    该hello2应用程序是一个Web模块,它使用Java Servlet技术来显示问候语和响应.使用文本编辑器查看应用程序文件,也可以使用NetBeans IDE. 此应用程序的源代码位于 _tut-i ...

  8. golang 中timer,ticker 的使用

    写一个程序, 5s, 10s后能定时执行一个任务,同时能不停的处理来的消息. ------------------------------------------------------------- ...

  9. jQuery -&gt; 获取/设置HTML或TEXT内容

    jQuery提供了两个API能够直接用来为元素加入内容. html() text() 当中html()是为指定的元素加入html内容 text()是为指定的元素加入文本内容 两者的差别在于,text中 ...

  10. ios oc 代码 转换为 c++ 描述代码编译过程

    clang -rewrite-objc main.m #import <Foundation/Foundation.h> #import <objc/runtime.h> // ...