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. negix启动不成功

    negix启动闪退,猜测可能端口占用,查看log发现 2020/11/30 11:38:40 [emerg] 15632#8688: CreateFile() "F:\项目工具\nginx- ...

  2. Swagger2简单使用教程

    Swagger2简单使用教程 1.简介 ​ Swagger是为了解决企业中接口(api)中定义统一标准规范的文档生成工具.很多采用前后端分离的模式,前端只负责调用接口,进行渲染,前端和后端的唯一联系, ...

  3. 洛谷 P6295 - 有标号 DAG 计数(生成函数+容斥+NTT)

    洛谷题面传送门 看到图计数的题就条件反射地认为是不可做题并点开了题解--实际上这题以我现在的水平还是有可能能独立解决的( 首先连通这个条件有点棘手,我们尝试把它去掉.考虑这题的套路,我们设 \(f_n ...

  4. 洛谷 P1224 - [NOI2013] 向量内积(随机化)

    洛谷题面传送门 一道很神的随机化. 首先由于我们要求向量点乘 \(\bmod k\) 的值,因此我们可以将所有 \(x_{i,j}\) 都模上 \(k\),显然该操作不影响结果正确性. 注意到这里的 ...

  5. Matlab 调用 Python 脚本

    Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...

  6. Oracle——listener数据库监听 lsnrctl

    lsnrctl(Listener Control)是一个SQL*Net工具,用于控制数据库listener,这个工具提供了命令用于控制listener的启动.停止,查看listener的状态,改变li ...

  7. C语言中储存的大小端问题

    一.大小端定义 研究变量的高低字节:从左往右看,字节序递增,也就是最右边是最低字节,最右边是最高字节.如 int i = 0x01020304, 01是高字节,04是低字节.如果是字符串如char a ...

  8. github小白的记录随笔

    此文章是基础本地安装好了git环境的新手小白. 进入您要上传项目的根路径,右键选择Git Bash Here. 输入命令: git init //初始化git仓库环境 git remote add o ...

  9. Flume(四)【配置文件总结】

    目录 一.Agent 二.Source taildir arvo netstat exec spooldir 三.Sink hdfs kafka(待续) hbase(待续) arvo logger 本 ...

  10. 【XSS】再谈CSP内容安全策略

    再谈CSP内容安全策略 之前每次都是想的很浅,或者只是个理论派,事实证明就是得动手实践 参考 CSP的用法 官方文档 通过设置属性来告诉浏览器允许加载的资源数据来源.可通过Response响应头来设置 ...