【排序】一次查找两元素

问题 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