EOJ 2991 鞍点 C++

这篇博客介绍了一道EOJ题目,即寻找5x5矩阵中的鞍点。鞍点是指行中最大且列中最小的元素。博客详细阐述了思路,包括存储矩阵、计算每行最大值和每列最小值,以及如何找到鞍点。通过遍历矩阵,当找到行最大值等于列最小值时,输出对应的行和列坐标。如果没有鞍点,则输出-1 -1。博客提供了C++代码实现,并附带了样例输入和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

在高铁上无skr做,只能刷题解闷,,

虽然早上五点半就起了,但还是低估了在路上的时间,而且也低估了车站里的人流量,导致距离发车还有十分钟的时候我还在排队取票,然后只能豁出老脸走到队首问那个老哥我可不可以先取票,然后成功取票在发车前三分钟苟上了车【捂脸

回到正题,这道题和我很合(也可能是因为太简单?),一遍AC~

题目:

  1. 鞍点

单点时限: 2.0 sec
内存限制: 256 MB

寻找矩阵中的鞍点:在矩阵中可能有这样一个数字,它在自己的行中是最大的,但是在自己所处的列中又是最小的,我们把这样的元素称为鞍点。一个矩阵中可能没有鞍点,也可能有多个鞍点。输入一个 5×5 的矩阵,寻找该矩阵中的所有鞍点并按照它们在矩阵中的位置(行,列)输出。

输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。

接下来共 5×T 行整数,其中每组测试数据有 5 行,分别是该矩阵的 5 行元素。

每行 5 个整数,整数之间由空格分开。(每个元素为 1 -100 之间的整数。)

输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。

然后每一行输出由一个空格分隔的两个整数,表示一个鞍点所在的行号和列号(行号、列号从 0 开始计数)。如有两个以上鞍点,按照行号由小到大排列;行号相同时,按照列号由小到大排序。如没有鞍点,则输出一行-1 -1。

样例

input
3
4 3 6 5 8
2 1 7 6 7
1 2 5 3 4
4 3 8 9 10
1 1 9 8 2
1 6 7 8 1
1 9 1 1 9
1 1 1 7 1
1 23 1 1 1
1 1 1 24 1
10 20 11 8 9
1 20 12 11 10
3 30 15 21 21
8 20 20 3 12
9 50 52 70 61
output
case #0:
2 2
case #1:
-1 -1
case #2:
0 1
1 1
3 1

思路:

每个case中:

  • 一个二维数组存矩阵;
  • 两个一维数组分别存每行的最大值和每列的最小值;
  • 一个布尔变量flag代表有无鞍点(初始化为false)

如果某行最大值==某列的最小值,则存在鞍点,则令flag=true,并输出该行行标、该列列标。

若没有鞍点,则循环结束后的flag==false,则输出 -1 -1。

代码:

#include<iostream>
#include<stdio.h>
using namespace std;

int main(){
   
   
    int cas;
    cin>>cas;
    
### 关于EOJ DNA排序问题的解题思路 在处理EOJ中的DNA排序问题时,主要挑战在于如何高效地完成字符串数组的排序以及去重操作。由于题目涉及两个测试点可能因时间复杂度较高而超时,因此需要优化算法设计。 #### 数据结构的选择 为了降低时间复杂度并提高效率,可以引入`std::map`或者`unordered_map`来辅助实现去重功能[^1]。这些数据结构能够快速判断某项是否存在集合中,并支持高效的插入和查找操作。具体来说: - 使用 `std::set` 可以自动去除重复元素并对结果进行升序排列; - 如果还需要自定义比较逻辑,则可以选择基于哈希表的数据结构如 `unordered_set` 配合手动排序。 #### 排序策略 对于给定的一组DNA序列(通常表示为长度固定的字符串),按照字典顺序对其进行排序是一个常见需求。C++标准库提供了非常方便的方法来进行此类任务——即利用 `sort()` 函数配合合适的比较器函数对象或 lambda 表达式来指定所需的排序规则。 下面展示了一个简单的例子用于说明如何读取输入、执行必要的预处理步骤(包括但不限于删除冗余条目),最后输出经过整理的结果列表: ```cpp #include <bits/stdc++.h> using namespace std; int main(){ set<string> uniqueDNAs; string line, dna; while(getline(cin,line)){ stringstream ss(line); while(ss>>dna){ uniqueDNAs.insert(dna); // 自动过滤掉重复项 } } vector<string> sortedUnique(uniqueDNAs.begin(),uniqueDNAs.end()); sort(sortedUnique.begin(),sortedUnique.end()); for(auto it=sortedUnique.cbegin();it!=sortedUnique.cend();++it){ cout<<*it; if(next(it)!=sortedUnique.cend())cout<<" "; } } ``` 上述程序片段实现了基本的功能模块:从标准输入流逐行解析得到各个独立的DNA片段;借助 STL 容器特性轻松达成无重复记录维护目的;最终依据字母大小关系重新安排各成员位置后再统一打印出来[^3]。 #### 学习延伸至自然语言处理领域 值得注意的是,在计算机科学特别是机器学习方向上,“上下文”概念同样重要。例如 Word2Vec 这样的技术就是通过考察周围词语环境来捕捉特定词汇的意义特征[^2]。尽管两者应用场景差异显著,但从原理层面看均体现了对局部模式挖掘的关注。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值