Content

给定一个 \(5\times 5\) 的矩阵,请在这个矩阵中找出一个元素,使得这个元素既是它所在行的最大值,也是它所在列的最小值。

Solution

如果直接暴力枚举每一个元素,再去算每一个元素所在行的最大值和所在列的最小值,再比较,虽然也可以通过这道题目,但是太麻烦了。有没有更简单的方法?

答案是肯定的。

我们发现对于同一行的元素,每次计算所在行的最大值其实是重复 \(5\) 次了的,同样地,我们发现对于同一列的元素,每次计算所在列的最小值其实也是重复 \(5\) 次了的。有没有不重复的方法?预处理。我们在整个程序的核心部分开始之前,先预处理每一行和每一列,求出每一行的最大值和每一列的最小值。这样的复杂度如果是 \(n\times n\) 的矩阵的话是 \(\mathcal O(n^2)\) 的(即先枚举每一行或每一列,再枚举每一行或每一列的元素取最值)。然后我们就可以在执行程序的时候,直接拿预处理出来的最大值和最小值比较输出就好了。

预处理的优势在本题中尽管没有很大的体现,但是在今后的信息学习中,你将可以看到预处理发挥的巨大的优化复杂度的作用。

Code

#include <cstdio>
#include <algorithm> //因为要用到 max 和 min 函数
using namespace std; int fl = 0; //用来判断是否有鞍点
long long a[7][7], col[7], row[7]; int main() {
for(int i = 1; i <= 5; ++i) row[i] = -0x3f3f3f3f3f3f3f3f, col[i] = 0x3f3f3f3f3f3f3f3f; //C++ 中,0x开头的后面数是十六进制。
for(int i = 1; i <= 5; ++i) for(int j = 1; j <= 5; ++j) a[i][j] = Rll;
for(int i = 1; i <= 5; ++i) for(int j = 1; j <= 5; ++j) row[i] = max(row[i], a[i][j]);
for(int j = 1; j <= 5; ++j) for(int i = 1; i <= 5; ++i) col[j] = min(col[j], a[i][j]); //想想这里为什么要先循环 j 再循环 i。
for(int i = 1; i <= 5; ++i) for(int j = 1; j <= 5; ++j) if(a[i][j] == col[j] && a[i][j] == row[i]) {printf("%d %d %lld", i, j, a[i][j]), fl = 1; break;}
if(!fl) printf("not found");
return 0;
}

LuoguB2102 计算鞍点 题解的更多相关文章

  1. OpenJudge计算概论-计算鞍点

    /*======================================================================== 计算鞍点 总时间限制: 1000ms 内存限制: ...

  2. luoguP1313 计算系数 题解(NOIP2011)

    P1313 计算系数 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<cm ...

  3. p1313计算系数题解

    #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #i ...

  4. luogu1313计算系数题解--二项式定理

    题目链接 https://www.luogu.org/problemnew/show/P1313 分析 二项式定理 \((a+b)^n=\sum_{k=0}^{n}{C^k_n a^k b^{n-k} ...

  5. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T01——T10

    T01 矩阵交换行 描述 给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果. 输入 输入共6行,前5行为矩阵的每一行元素,元 ...

  6. OpenJudge解题经验交流

    1.1编程基础之输入输出01:Hello, World! 02:输出第二个整数PS:a,b需用longint类型接收 03:对齐输出 04:输出保留3位小数的浮点数 05:输出保留12位小数的浮点数 ...

  7. bzoj4198 荷马史诗 哈夫曼编码

    逐影子的人,自己就是影子. --荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛>和&l ...

  8. [NOI 2015]荷马史诗

    Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由& ...

  9. 【算法】CRF(条件随机场)

    CRF(条件随机场) 基本概念 场是什么 场就是一个联合概率分布.比如有3个变量,y1,y2,y3, 取值范围是{0,1}.联合概率分布就是{P(y2=0|y1=0,y3=0), P(y3=0|y1= ...

随机推荐

  1. github文件下载加速器

    https://d.serctl.com/?dl_start

  2. 【Matrix-tree Theorem学习笔记】

    定义度数矩阵\(D(G)\): 定义邻接矩阵\(C(G)\): 定义\(Laplace\)矩阵\(A\) \( A(G) = D(G) - C(G) \) 记图\(G\)的所有生成树权值和为\(t(G ...

  3. Codeforces 718E - Matvey's Birthday(思维题)

    Codeforces 题面传送门 & 洛谷题面传送门 首先注意到这个图的特殊性:我们对于所有 \(s_i=s_j\)​ 的 \((i,j)\)​ 之间都连了条边,而字符集大小顶多只有 \(8\ ...

  4. Yet Another Minimization Problem

    Yet Another Minimization Problem 一个很显然的决策单调性. 方程是很显然的 $ f_i = \min{f_{j-1} + w(j,i)} $ . 它具有决策单调性,可以 ...

  5. R语言与医学统计图形-【18】ggplot2几何对象汇总

    ggplot2绘图系统--几何对象汇总 前面介绍了常见的几种基本的几何对象,并且介绍了scale.stat等其他要素.后续将介绍position.themes.coord和faceting等函数. 这 ...

  6. centOS6和7单用户修改密码

    CentOS6 1.       进入启动系统倒计时的时候,按esc 之后进入一下界面: 2.       按a 键进入修改内核参数页面 3.       在quiet后面加入空格和1 ,如下:回车进 ...

  7. 58-Odd Even Linked List

    Odd Even Linked List My Submissions QuestionEditorial Solution Total Accepted: 29496 Total Submissio ...

  8. Excel-姓名列中同一个人汇总金额列,得出总金额

    8.姓名列中同一个人求和金额列,得出总金额. 方法一: P2处公式=SUMPRODUCT(($M$2:$M$20=$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan. ...

  9. 13.Merge k Sorted Lists

    思路:利用map<int,vector<ListNode*> > 做值和指针的映射,最后将指针按值依次链接起来, 时间复杂度O(N),空间O(N) Merge k sorted ...

  10. 转 【Android】- Android与html5交互操作

    转自:https://blog.csdn.net/baidu_35701759/article/details/70314812 1. Android提供了WebView控件可访问网页 通过webVi ...