【排序】一次查找两元素

问题 A: 【排序】一次查找两元素

时间限制: 1 Sec   内存限制: 64 MB
提交: 30   解决: 21
[ 提交] [ 状态] [ 讨论版] [命题人: ]
题目描述
修罗王和邪狼逃出监狱,混入了监狱门口检查站前排成一列准备待检的囚犯人群中,由于每个囚犯入狱前均以编号来表示,且该编号的编写规则是囚犯的危险性越大,则编号就越小。显然,修罗王和邪狼因其极端的危险性,其编号必定是这一列无序排列的人群中最小的两个,那么,如何对所有人的编号只用一遍扫描,即找出修罗王和邪狼的编号呢?

输入
共两行,第一行为一个数N(N≤1000000),即排队的人数,第二行为N个数,即每个人的编号,每个编号均不超过int类型的最大值。

输出
输出由小到大排列的最小的两个编号。

样例输入
10
2 1 76 11 4 765 32 56 3 23

样例输出
1 2
分析:排序,输出前两个元素。
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int n;
vector<int>num;
void init(){
    cin>>n;
    num.resize(n+1);
    range(i,1,n)cin>>num[i];
    sort(num.begin()+1,num.end());
}
void solve(){
    cout<<num[1]<<" "<<num[2]<<endl;
}
int main() {
    init();
    solve();
    return 0;
}
View Code

 

 

转载于:https://www.cnblogs.com/Rhythm-/p/9348116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值